EditCommandColumn 最主要的功能是利用LinkButton 或PushButton 来下达编辑资料的命令,并且可以触发DataGrid Web 控件的事件。EditCommandColumn 进入编辑模式的时候会产生 TextBox 让使用者编辑,也可以和TemplateColumn 一起配合使用,我们后面介绍 TemplateColumn 的时候会说明。其使用语法如下所示:
<ASP:EditCommandColumn ButtonType="LinkButton | PushButton" CancelText="CancelButtonCaption" EditText="EditButtonCaption" FooterText="FooterText" HeaderImageUrl="url" HeaderText="HeaderText" ReadOnly="True | False" SortField="DataSourceFieldToSortBy" UpdateText="UpdateButtonCaption" Visible="True | False" /> 其中除了共同基础属性以及样式对象外,常用的属性如下表所示: 当使用者点选了显示EditText 的控件时,DataGrid Web 控件会自动触发OnEditCommand 事件,并执行OnEditCommand 属性所指定的事件程序;倘若点选了显示UpdateText 以及CancelText 内容的控制像,也一样分别自动触发OnUpdateCommand 以及OnCancelCommand 事件。下列程序代码范例增加了一个EditCommandColumn 字段,并且显示使用者点选了哪一个按钮:
<%@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" OnEditCommand="dgA_ECmd" OnUpdateCommand="dgA_UCmd" OnCancelCommand="dgA_CCmd" > <Property Name="Columns"> <ASP:BoundColumn HeaderText="姓名" DataField="UserName"/> <ASP:BoundColumn HeaderText="电话" DataField="UserTel"/> <ASP:EditCommandColumn HeaderText="编辑" ButtonType="PushButton" EditText="编辑" UpdateText="更新" CancelText="放弃"/> </Property> </ASP:DataGrid> </Form> <ASP:Label Id="Label1" Runat="Server"/> <Script Language="VB" Runat="Server"> Dim dtDataTable As DataTable=GetTable("CH08MyWeb.mdb", "Members") Sub Page_Load(Sender As Object, e As EventArgs) If Page.IsPostBack=False Then dgA.DataSource=dtDataTable.DefaultView Page.DataBind() End If End Sub Sub dgA_PageChg(Sender As Object, e As DataGridPageChangedEventArgs) dgA.DataSource=dtDataTable.DefaultView Page.DataBind() End Sub Sub dgA_ECmd(Sender As Object, e As DataGridCommandEventArgs) Label1.Text="您点选了第" & (e.Item.ItemIndex+1).ToString & " 个字 段的编辑." dgA.EditItemIndex=e.Item.ItemIndex dgA.DataSource=dtDataTable.DefaultView Page.DataBind() End Sub Sub dgA_UCmd(Sender As Object, e As DataGridCommandEventArgs) Label1.Text="您点选了第" & (e.Item.ItemIndex+1).ToString & " 个字 段的更新." dgA.EditItemIndex=-1 dgA.DataSource=dtDataTable.DefaultView Page.DataBind() End Sub Sub dgA_CCmd(Sender As Object, e As DataGridCommandEventArgs) Label1.Text="您点选了第" & (e.Item.ItemIndex+1).ToString & " 个字 段的放弃." dgA.EditItemIndex=-1 dgA.DataSource=dtDataTable.DefaultView Page.DataBind() End Sub </SCRIPT> </Html> 上述范例中,由于DataTable 对象要让其它事件程序使用,所以我们在网页阶层的宣告区宣告。我们也指定了OnEditCommand 事件、OnUpdateCommand 事件以及OnCancelCommand 事件;当使用者按下「编辑」按钮时会自动触发我们所指定的dgA_ECmd 事件程序,如下程序代码范例所示:
Sub dgA_ECmd(Sender As Object, e As DataGridCommandEventArgs) Label1.Text="您点选了第" & (e.Item.ItemIndex+1).ToString & " 个字 段的编辑." dgA.EditItemIndex=e.Item.ItemIndex dgA.DataSource=dtDataTable.DefaultView Page.DataBind() End Sub 上述程序代码片段将DataGrid 的EditItemIndex 属性设定为使用者所点选记录的索引值,所以该笔记录就会进入编辑模式;此时原来字段内的「编辑」按钮就会变成「更新」以及「放弃」。使用者若编辑完毕后再点选「更新」或「放弃」按钮时,即触发所指定的OnUpdateCommand 或是OnCancelCommand 事件;这些事件最后将DataGrid 对象的EditItemIndex 属性设为-1,表示没有任何项目被编辑,让数据回复到原来的显示模式。如下图所示: |