Я хочу суммировать общее количество полов в нижнем колонтитуле повторителя, используя vb.net, используя привязку данных элемента, код позади неверен, потому что я не знаю, как это сделать...
ПЕРЕДНИЙ КОД
<asp:Repeater ID = "repGender" runat = "server">
<HeaderTemplate>
<table cellspacing = "0" rules = "all" border = "1">
<tr>
<th>Gender</th>
<th>Total</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<%# Eval("GENDER")%>
</td>
<td style = "text-align: center">
<%# Eval("TOTAL")%></a>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
<tr style = "font-weight: bold">
<td>Grand Total</td>
<td style = "text-align: center">
<asp:Label runat = "server" ID = "lblTotal"></asp:Label>
</td>
</tr>
</table>
</FooterTemplate>
</asp:Repeater>
ЗА КОДОМ
Protected Sub repGender_ItemDataBound(sender As Object, e As RepeaterItemEventArgs) Handles repGender.ItemDataBound
If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then
Total += Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, ""))
Else e.Item.ItemType == ListItemType.Footer
End If
End Sub
Итак, нам нужно определить простую общую переменную на уровне «класса» формы. он должен сохраняться только во время операции привязки данных.
Итак, учитывая вашу разметку выше, у нас есть этот код для загрузки повторителя.
Dim MyTotal As Integer
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
LoadData
End If
End Sub
Sub LoadData()
Dim strSQL As String =
"SELECT Gender, count(*) as TOTAL
FROM Employee
GROUP BY Gender"
Dim rstData As New DataTable
Using mycon As New SqlConnection(GetConstr)
Using cmdSQL As New SqlCommand(strSQL, mycon)
mycon.Open()
rstData.Load(cmdSQL.ExecuteReader)
End Using
End Using
MyTotal = 0
repGender.DataSource = rstData
repGender.DataBind()
End Sub
И с вашей разметкой мы видим/получаем это:
И наше событие привязки строки данных выглядит так:
Protected Sub repGender_ItemDataBound(sender As Object, e As RepeaterItemEventArgs) Handles repGender.ItemDataBound
If e.Item.ItemType = ListItemType.Item Or
e.Item.ItemType = ListItemType.AlternatingItem Then
' We don't have lable or text box with an "id" in repeat
' section, (can't use find control unless you assign "id" to these controls).
' so, lets grab the whole data row used for binding
Dim gData As DataRowView = e.Item.DataItem
MyTotal = MyTotal + gData.Item("TOTAL")
End If
If e.Item.ItemType = ListItemType.Footer Then
' set the total value in footer
Dim lblTotal As Label = e.Item.FindControl("lblTotal")
lblTotal.Text = MyTotal
End If
End Sub