BoundColumn 最主要的功能是利用LinkButton 或PushButton 来显示数据源中的一个字段内容,并且可以触发DataGrid Web 控件的事件。其使用语法如下所示:
<ASP:ButtonColumn ButtonType="LinkButton | PushButton" CommandName="命令名称" DataTextField="DataSourceField" DataTextFormatString="FormatString" FooterText="FooterText" HeaderImageUrl="url" HeaderText="HeaderText" ReadOnly="True | False" SortField="DataSourceFieldToSortBy" Text="ButtonCaption" Visible="True | False" /> 其中除了共同基础属性以及样式对象外,常用的属性如下表所示:
下列程序代码范例以BoundColumn 来显示字段内容,并且显示使用者点选了哪一笔记录:
<%@Import Namespace=System.Data.ADO%> <%@Import Namespace=System.Data%> <!--#Include File="GetTable.inc"--> <Html> <Form Runat="Server"> <ASP:DataGrid Id="dgA" AllowPaging="True" PageSize="5" OnPageIndexChanged="dgA_PageChg" Runat="Server" PagerStyle-Mode="NumericPages" BorderColor="#808080" HeaderStyle-Font-Names="Courier New" HeaderStyle-BackColor="#D1DCEB" HeaderStyle-Font-Bold="True" HeaderStyle-HorizontalAlign="Center" AutoGenerateColumns="False" OnItemCommand="dgA_ICmd"> <Property Name="Columns"> <ASP: ButtonColumn HeaderText="姓名" DataTextField="UserName"/> <ASP:BoundColumn HeaderText="电话" DataField="UserTel"/> <ASP:BoundColumn HeaderText="住址" DataField="UserAdd"/> </Property> </ASP:DataGrid> </Form> <ASP:Label Id="Label1" Runat="Server"/> <Script Language="VB" Runat="Server"> Sub Page_Load(Sender As Object, e As EventArgs) If Page.IsPostBack=False Then Dim dtDataTable As DataTable=GetTable("CH08MyWeb.mdb", "Members") dgA.DataSource=dtDataTable.DefaultView Page.DataBind() End If Label1.Text="您目前没有点选任何记录." End Sub Sub dgA_PageChg(Sender As Object, e As DataGridPageChangedEventArgs) Dim dtDataTable As DataTable=GetTable("CH08MyWeb.mdb", "Members") dgA.DataSource=dtDataTable.DefaultView Page.DataBind() End Sub Sub dgA_ICmd(Sender As Object, e As DataGridCommandEventArgs) Dim shtRow As Short= e.Item.ItemIndex+1 If shtRow<>0 Then Label1.Text="您点选了第" & shtRow.ToString() & _ " 个字段的数据, 这<br>笔数据在数据源中是第" Label1.Text+=((dgA.CurrentPageIndex * dgA.PageSize) + shtRow).ToString & _ "笔记录." End If End Sub </SCRIPT> </Html> 上述范例我们指定DataGrid Web 控件的OnItemCommand 属性为dgA_ICmd,表示按下显示使用者名称的ButtonColumn 时会触发dgA_CCmd 事件,并且执行dgA_Icmd 事件程序;如下程序代码片段所示:
Sub dgA_ICmd(Sender As Object, e As DataGridCommandEventArgs) Dim shtRow As Short= e.Item.ItemIndex+1 If shtRow<>0 Then Label1.Text="您点选了第" & shtRow.ToString() & _ " 个字段的数据, 这<br>笔数据在数据源中是第" Label1.Text+=((dgA.CurrentPageIndex * dgA.PageSize) + shtRow).ToString & _ "笔记录." End If End Sub 在这个事件程序中,我们利用e.Item.ItemIndex 属性取得使用者点选了第几个项目的Index 值;由于Index 由0 开始,所以我们加上1 表示点选了第几个项目。如果没有任何项目被点选,则 e.Item.ItemIndex 属性传回-1。由于变量shtRow 为e.Item.ItemIndex 加1 的结果,所以我们藉由判断变量shtRow 是否为0 来得知使用者是否有选择选项。 因为e.Item.ItemIndex 属性传回的是使用者在DataGrid Web 控件上所点选的项目,并不是记录在数据源的地址;所以我们透过计算目前的页数索引乘以每页的纪录笔数后,再加上目前所在的字段即可得到该笔数据在数据源中的实际地址。所以使用者若点选了第六页的第四个字段,表达式则为(5*5)+4,结果29 就是记录在数据源的实际顺序。
若要取得该笔记录在数据源中的索引值,由于Index 值是由0 开始计数,所以只要再减去1 即可。 |