Hejsan. Jag har en DataGrid med ett antal templates. En av dessa är en footertemplate som innehåller en label med en totalsumma: Hittade följande kod som jag sedan modifierat för min label och min datagrid: Istället för att uppfinna hjulet tycker jag du skall titta på Asp.Net Commerce Starter Kit (www.asp.net/Default.aspx?tabindex=9&tabid=47). Där finns denna funktionalitet löst på ett utmärkt sätt.Komma åt värden i en footertemplate
<asp:TemplateColumn HeaderText="Pris" FooterText="Summa">
<ItemTemplate>
<asp:Label ID="lblPris" Runat="server" text = '<%#container.dataitem("pris")%>'>
</asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:Label ID="lblSumma" Runat="server" ForeColor= Chocolate text = '<%#summa%>'>
</asp:Label>
</FooterTemplate>
</asp:TemplateColumn>
(summa får sitt värde från en globalvariabel)
Jag har även en bild som man kan klicka på för att öka på antalet i kundvagnen vilket då skall göra att summan ökar. När bilden klickas på anropas:
Sub uppdateraAntal(ByVal sender As System.Object, ByVal e As DataGridCommandEventArgs)
Hur kommer jag nu åt värdet i footertemplaten som innehåller labeln med summan?
Har provat följande i subben uppdateraAntal:
<code>
Dim nyttAntal As String
Dim böcker As Collection
Dim bok As clsBok
Dim totsum As String
If e.CommandName = "okaantal" Then
nyttAntal = CType(e.Item.FindControl("lblAntal"), Label).Text
nyttAntal = nyttAntal + 1
CType(e.Item.FindControl("lblAntal"), Label).Text = nyttAntal
totsum = CType(dtgKundvagn.FindControl("lblAntal"), Label).Text
totsum = CType(dtgKundvagn.FindControl("lblSumma"), Label).Text
summa = CType(totsum + CType(e.Item.FindControl("lblPris"), Label).Text, Integer)
ElseIf e.CommandName = "minskaantal" Then
nyttAntal = CType(e.Item.FindControl("lblAntal"), Label).Text
nyttAntal = nyttAntal - 1
CType(e.Item.FindControl("lblAntal"), Label).Text = nyttAntal
totsum = CType(dtgKundvagn.FindControl("lblSumma"), Label).Text
summa = CType(totsum - CType(e.Item.FindControl("lblPris"), Label).Text, Integer)
End If
böcker = Session("Kundvagn")
For Each bok In böcker
If dtgKundvagn.DataKeys(e.Item.ItemIndex) = bok.bokid Then
bok.antal = CType(e.Item.FindControl("lblAntal"), Label).Text
End If
Next
Session("Kundvagn") = böcker
bindDatagrid()
</code>Sv: Komma åt värden i en footertemplate
Dim CheckValue As Boolean
Dim GridRow As DataGridItem
Dim ColCheckbox As New CheckBox()
Dim ColDropDown As New DropDownList()
Dim teststring As String
For Each GridRow In dgRolls.Items
ColCheckbox = GridRow.FindControl("aspcheckbox") ''
If (ColCheckbox.Checked) Then
CheckValue = ColCheckbox.Checked
End If
ColDropDown = GridRow.FindControl("aspdropdownlist")
If (ColDropDown.SelectedItem.Text > " ") Then
teststring = ColDropDown.SelectedItem.Text
End If
Next
Response.Redirect("My.aspx")
Problemet är att findcontrol returnerar en label om den är en itemtemplate men inte om den är en footertemplate.
Dvs hur gör jag för att findcontrol skall returnera en label och inte nothing om den ligger i en footertemplate:
<FooterTemplate>
<asp:Label ID="lblSumma" Runat="server" ForeColor= Chocolate text = '<%#summa%>'>
</asp:Label>
</FooterTemplate>
HJÄLP NÅGON!!!!!!Sv: Komma åt värden i en footertemplate
/André Colbiörnsen, MVP Asp/Asp.Net