我有一个 GridView 控件,我动态绑定到一个 DataTable,该控件由基于一组选定选项构建的查询填充。
我想要做的只是处理 RowDataBound 事件,以便根据数据库字段的值格式化特定的行。此事件处理程序中的代码工作正常。我的问题是,调用此事件会导致 GridView 仅显示 DataTable 中的第一条记录,几乎就像 Gridview 在绑定第一行后绑定到 DataTable 后停止一样。
我尝试动态添加处理程序,但得到了相同的结果。
关于为什么简单地处理这个事件会导致 Gridview 这样做的任何想法?
我知道有足够的数据被返回(DataTable 填充了所有记录,并且 GridView 在不触及 RowDataBound 事件时显示所有记录都很好)。
我在生成查询、填充 DataTable 并绑定 GridView 后立即添加处理程序:
oDA.Fill(oDTbl)
figs_gv.DataSource = oDTbl
figs_gv.DataBind()
AddHandler figs_gv.RowDataBound, AddressOf gvRowDataBound
处理程序本身:
Protected Sub gvRowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow Then
If (e.Row.DataItem("Have") = "Yes") Then
For i As Integer = 1 To e.Row.Cells.Count
e.Row.Cells(i).BackColor = Drawing.ColorTranslator.FromHtml("#d3f1c7")
Next
End If
End If
End Sub
我还确定,在处理 RowDataBound 时,GridView 的 DATABOUND 事件永远不会被触发;绑定第一行后似乎立即停止绑定。