常见 Datagrid 错误

 

使用 ItemDataBound 或 ItemCreated 事件时,忘记检查适当的 ListItemType
Datagrid 控件对每个数据行引发两个事件。首次将每行添加到 Datagrid 时将引发 ItemCreated 事件,将数据绑定到每行时将引发 ItemDataBound 事件。添加单元格到 Datagrid 的表格输出时,这些事件可以用于控制每个单元格的外观或内容。例如,可以基于数值的范围修改单元格的背景颜色。但关键是要记住,这些事件的引发针对的是所有 Datagrid 项目类型,包括页眉、页脚和分页程序项目。如果执行 ItemDataBound 事件期间,没有在引用项目的数据之前仔细检查项目类型,第一个项目(通常是标题行)就将发生错误。如果 Datagrid 启用了分页,且将其设置为在顶端显示,那么第一个项目就会成为分页程序项目。以下示例代码显示如何在引用项目数据之前进行正确的 ListItemType 检查。不要忘了 AlternatingItem!

Sub DataGrid1_ItemDataBound(source As Object, _
    e As DataGridItemEventArgs)
      If (e.Item.ItemType = ListItemType.Item Or _
    e.Item.ItemType = ListItemType.AlternatingItem) Then
        If e.Item.DataItem("ForumDate") 
< DateTime.Today Then 
          e.Item.Cells(1).BackColor 

          System.Drawing.Color.FromName("#ffccff")
     
End If
      End If
End Sub

忘记在每个 Datagrid 事件中执行 .DataBind() 调用,从而导致回发
一个常见的问题是:“当我点击 Datagrid 某一行中的 Edit(编辑)链接时,页面回发,且不包含任何数据。这是什么错误?”问题在于数据仅在页面第一次被调用时绑定到网格。在每个 Datagrid 事件(Edit、Update、Cancel、Page 或 Sort)中,请确保设置了 Datagrid 的 Datasource 属性(除非已经在 
<asp:Datagrid> 声明中通过声明的方式进行了设置),并对 Datagrid 调用了 DataBind() 方法。

posted @ 2007-05-14 13:32  过河卒A  阅读(327)  评论(1编辑  收藏  举报