上述的程序代碼范例中,對于數據編修的功能還不是很完整,無法將記錄的修改狀況更新回數據源。接下來我們利用EditCommandColumn、TemplateColumn 以及一些事件程序將數據更新的功能完成。
<%@Import Namespace=System.Data.ADO%>
<%@Import Namespace=System.Data%>
<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-HorizontalAlign="Center"
AutoGenerateColumns="False"
OnEditCommand="dgA_ECmd" OnUpdateCommand="dgA_UCmd"
OnCancelCommand="dgA_CCmd" >
<Property Name="Columns">
<ASP:TemplateColumn>
<Template Name="HeaderTemplate">
姓名
</Template>
<Template Name="ItemTemplate">
<ASP:Image ImageUrl="ico7.gif" Runat="Server"/>
<%#Container.DataItem("UserName")%>
</Template>
<Template Name="EditItemTemplate">
<ASP:Image ImageUrl="ico8.gif" Runat="Server"/>
<ASP:TextBox Id="txtUserName"
Text='<%#Container.DataItem("UserName")%>'
Runat="Server"/>
</Template>
</ASP:TemplateColumn>
<ASP:TemplateColumn>
<Template Name="HeaderTemplate">
電話
</Template>
<Template Name="ItemTemplate">
<ASP:Image ImageUrl="ico7.gif" Runat="Server"/>
<%#Container.DataItem("UserTel")%>
</Template>
<Template Name="EditItemTemplate">
<ASP:Image ImageUrl="ico8.gif" Runat="Server"/>
<ASP:TextBox Id="txtUserTel"
Text='<%#Container.DataItem("UserTel")%>'
Runat="Server"/>
</Template>
</ASP:TemplateColumn>
<ASP:TemplateColumn>
<Template Name="HeaderTemplate">
住址
</Template>
<Template Name="ItemTemplate">
<ASP:Image ImageUrl="ico7.gif" Runat="Server"/>
<%#Container.DataItem("UserAdd")%>
</Template>
<Template Name="EditItemTemplate">
<ASP:Image ImageUrl="ico8.gif" Runat="Server"/>
<ASP:TextBox Id="txtUserAdd"
Text='<%#Container.DataItem("UserAdd")%>'
Runat="Server"/>
</Template>
</ASP:TemplateColumn>
<ASP:EditCommandColumn
HeaderText="編輯"
EditText="編輯"
UpdateText="更新"
CancelText="放棄"/>
</Property>
</ASP:DataGrid>
</Form>
<Script Language="VB" Runat="Server">
Dim dscA As ADODataSetCommand=New ADODataSetCommand("Select * From
Members", _
"Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\InetPub\wwwroot\CR\Ch08\MyWeb.Mdb")
Dim dsDataSet As DataSet=New DataSet
Dim dtDataTable As DataTable
Sub Page_Load(Sender As Object, e As EventArgs)
If Page.IsPostBack=False Then
BindGrid()
End If
End Sub
Sub BindGrid() '數據系結程序
dscA.FillDataSet(dsDataSet,"Members")
dtDataTable=dsDataSet.Tables("Members")
dgA.DataSource=dtDataTable.DefaultView
Page.DataBind()
End Sub
Sub dgA_PageChg(Sender As Object, e As DataGridPageChangedEventArgs) '
換頁程序
BindGrid()
End Sub
Sub dgA_ECmd(Sender As Object, e As DataGridCommandEventArgs) '進入編
輯模式dgA.EditItemIndex=e.Item.ItemIndex BindGrid()
End Sub
Sub dgA_UCmd(Sender As Object, e As DataGridCommandEventArgs) '數據更
新程序
Dim shtR As Short=(dgA.CurrentPageIndex * dgA.PageSize) +
e.Item.ItemIndex
Dim txtTemp As TextBox
dscA.FillDataSet(dsDataSet,"Members") '先將DataTable 從資料
源取回
dtDataTable=dsDataSet.Tables("Members") '為了便利起見而將
dtDataTable 指向目標數據表
txtTemp=e.Item.FindControl("txtUserName") '搜尋
DataListItem 內的控件
dtDataTable.Rows(shtR)("UserName")=txtTemp.Text '將找到
的控制之Text 屬性更新回
'相對應的記錄中
txtTemp=e.Item.FindControl("txtUserTel")
dtDataTable.Rows(shtR)("UserTel")=txtTemp.Text
txtTemp=e.Item.FindControl("txtUserAdd")
dtDataTable.Rows(shtR)("UserAdd")=txtTemp.Text
dscA.Update(dsDataSet,"Members") '將所作的改變更新回數據源
dgA.EditItemIndex=-1
BindGrid()
End Sub
Sub dgA_CCmd(Sender As Object, e As DataGridCommandEventArgs)
dgA.EditItemIndex=-1
BindGrid()
End Sub
</SCRIPT>
</Html>
Sub dgA_ECmd(Sender As Object, e As DataGridCommandEventArgs)
dgA.EditItemIndex=e.Item.ItemIndex
BindGrid()
End Sub
<Template Name= "EditItemTemplate">
<ASP:Image ImageUrl="ico8.gif" Runat="Server"/>
<ASP:TextBox Id="txtUserAdd"
Text='<%#Container.DataItem("UserAdd")%>'
Runat="Server"/>
</Template>
Sub dgA_UCmd(Sender As Object, e As DataGridCommandEventArgs) '數據更
新程序
Dim shtR As Short=(dgA.CurrentPageIndex * dgA.PageSize) +
e.Item.ItemIndex
Dim txtTemp As TextBox
dscA.FillDataSet(dsDataSet,"Members") '先將DataTable 從資料源
取回
dtDataTable=dsDataSet.Tables("Members") '為了便利起見而將
dtDataTable 指向目標數據表
txtTemp=e.Item.FindControl("txtUserName") '搜尋DataListItem 內的
控件
dtDataTable.Rows(shtR)("UserName")=txtTemp.Text '將找到的控制之
Text 屬性更新回
'相對應的記錄中
'...程序代碼略
dscA.Update(dsDataSet,"Members") '將所作的改變更新回數據源
dgA.EditItemIndex=-1 BindGrid()
End Sub
txtTemp=e.Item.FindControl("txtUserName") '搜尋DataListItem 內的控件
dtDataTable.Rows(shtR)("UserName")=txtTemp.Text '將找到的控制之
Text 屬性更新回
'相對應的記錄中