DataGrid的ItemDataBound用法实例

来源:互联网 发布:仙侠学院2 网络电影 编辑:程序博客网 时间:2024/04/20 10:53
鉴于在本版收到好多asp.net初学者因为不了解ItemDataBound事件的用法而提出问题,特写此实例教程,以飨众友。

实例:现要把如下的数据集(在查询管理器的查出来的结果集)绑定到DataGrid:


绑定结果为——



然而现在要实现如下效果:
一、第一列的产品名是一个链接,它要求链接目标为:
prod.aspx?name={产品名称}&spec={产品规格}
二、当产品单价>=1元时,将其单价显示为红色;
三、当产品单价为0时,将其整行的背景显示为黄色;

结果如下图:


回想我们以前用ASP编程的时候,对于要生成数据页面的做法,我们是事必亲躬地为生成的每一行表格编写HTML代码,可是我遇到好多初学.net的人抱怨,.net中的Datagrid使数据页面的生成变得非常方便,但是对于特殊要求却无能为力。

其实并非如此,对于asp中能实现的效果,asp.net中照样能够非常方便地实现,针对上述要求,只需为DataGrid的ItemDataBound事件编写代码即可。

DataGrid每生成一行,都会执行ItemDataBound事件一次,从上图中看到,这个DataGrid共有12行(包括10数据行,一个页眉行,和一个分页行)。则这里ItemDataBound事件将会被执行12次。而事件中的e参数的e.Item.ItemType则可用于判断当前正在绑定的行是什么行,它是一个枚举,见下图:


(注:在DataGrid的属性生成器中,第一列为超级链接列,而且不必填写“Url字段”和“Url格式字符串”两个属性值)
当然,我们无需理会生成页眉和分页行的情况,但当绑定数据集的行时,该行有可能是普通数据行、替换行、选定行、处于编辑状态的行。

参数e的e.item指向当前正在绑定的行
而e.item.cells集合指向当前正在绑定的行的每一个单元格。

由此,我们已给能够为上述要求编写代码了——

Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound
Select Case e.Item.ItemType
Case ListItemType.AlternatingItem, ListItemType.EditItem, ListItemType.Item, ListItemType.SelectedItem
Dim drv As DataRowView = e.Item.DataItem
Dim hlk As HyperLink = e.Item.Cells(0).Controls(0)
hlk.NavigateUrl = "prod.aspx?name=" & drv("prod_name") & "&spec=" & drv("prod_spec")

If drv("price") >= 1 Then
e.Item.Cells(2).ForeColor = Color.Red
End If
If drv("price") = 0 Then
e.Item.BackColor = Color.Yellow
End If

End Select
End Sub

由于程序简单,所以这里不再提供C#的代码。
 
原创粉丝点击