帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > ASP.NET编程
数据的编辑
作者:佚名 发布时间:2005-04-02 来源:不详
 


    下列两个范例都是将DataList Web 控件加入编辑数据的功能,第一个范例只用OnItemCommand 事件,第二个范例综合OnEditCommand、OnCancelCommand,以及OnUpdateCommand 事件。使用者在选择一个项目展开SelectedItemTemplate 样版显示详细资料后,若选择「编辑」选项时会显示EditItemTemplate 样版,EditItemTemplate 样版是以TextBox来显示使用者资料,并且可以接受使用者的修改。修改完成后可以按「确定」执行将数据更新回数据源的动作,「放弃」可以回到显示使用者详细数据的选项:

范例一只使用OnItemCommand 事件

<%@Import Namespace=System.Data.ADO%>
<%@Import Namespace=System.Data%>
<Html>
<Form runat="Server">
<ASP:DataList Id="dlA" OnItemCommand="dlA_ICMD"
GridLines="both" Runat="Server">
<Template Name="ItemTemplate">
<ASP:Image ImageUrl="ico1.gif" Runat="Server"/>
姓名: <%#Container.DataItem("UserName")%>
<ASP:LinkButton Id="lbShow" Text=">" Runat="Server"/>
</Template>
<Template Name="EditItemTemplate">
<ASP:Image ImageUrl="ico1.gif" Runat="Server"/>
姓名: <%#Container.DataItem("UserName")%><br>
电话:<ASP:TextBox Id="T1"
Text='<%#Container.DataItem("UserTel")%>'
Runat="Server"/><br>
住址:<ASP:TextBox Id="T2"
Text='<%#Container.DataItem("UserAdd")%>'
Runat="Server"/><br>
电邮:<ASP:TextBox Id="T3"
Text='<%#Container.DataItem("UserEMail")%>'
Runat="Server"/><br>
<ASP:LinkButton Id="lbCancel" Text="[放弃]" Runat="Server"/>
<ASP:LinkButton Id="lbSubmit" Text="[确定]" Runat="Server"/><br>
</Template>
<Template Name="SelectedItemTemplate">
<ASP:Image ImageUrl="ico1.gif" Runat="Server"/>
姓名: <%#Container.DataItem("UserName")%>
<ASP:LinkButton Id="lbClose" Text="<" Runat="Server"/><br>
电话: <%#Container.DataItem("UserTel")%><br>
住址: <%#Container.DataItem("UserAdd")%><br>
电邮: <%#Container.DataItem("UserEmail")%><br>
<ASP:LinkButton Id="lbEdit" Text="[编辑]" Runat="Server"/><br>
</Template>
</ASP:DataList>
</Form>
<Script Language="VB" Runat="Server">
Dim dscA As ADODataSetCommand=New ADODataSetCommand("Select * From
Members", _
"Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:InetPubwwwrootCRCh05MyWeb.Mdb")
Dim dsDataSet As DataSet=New DataSet
Dim dtDataTable As DataTable
Sub Page_Load(Sender As Object, e As EventArgs)
dscA.FillDataSet(dsDataSet,"Members")
dtDataTable=dsDataSet.Tables("Members")
dlA.DataSource=dtDataTable.DefaultView
If Not Page.IsPostBack Then Page.DataBind()
End Sub
Sub dlA_ICMD(Sender As Object, e As DataListCommandEventArgs)
If e.CommandSource.Id="lbShow" Then
dlA.SelectedIndex=e.Item.ItemIndex
ElseIf e.CommandSource.Id="lbClose" Then
dlA.SelectedIndex=-1
ElseIf e.CommandSource.Id="lbEdit" Then
dlA.EditItemIndex=e.Item.ItemIndex
ElseIf e.CommandSource.Id="lbCancel" Then
dlA.EditItemIndex=-1
ElseIf e.CommandSource.Id="lbSubmit" Then
Dim txtTemp As TextBox
txtTemp=e.Item.FindControl("T1") '取回ListItem 中名为T1 的控件参

dtDataTable.Rows(dlA.EditItemIndex)("UserTel")=txtTemp.Text
txtTemp=e.Item.FindControl("T2") '取回ListItem 中名为T2 的控件参

dtDataTable.Rows(dlA.EditItemIndex)("UserAdd")=txtTemp.Text
txtTemp=e.Item.FindControl("T3") '取回ListItem 中名为T3 的控件参

dtDataTable.Rows(dlA.EditItemIndex)("UserEmail")=txtTemp.Text
dscA.Update(dsDataSet,"Members")
dlA.EditItemIndex=-1
End If
dlA.DataBind()
End Sub
</SCRIPT>
</Html>


    由于我们要在许多程序中使用DataTable、DataSet 以及DataSetCommand 对象,所我们将这些对象变量宣告在网页阶层的宣告区。程序开始执行时,先以ItemTemplate 样版来显示资料。待任意项目被选择后,便以SelectedItemTemplate 样版来显示该项目,如下图所示:


选择「编辑」选项后,便以EditItemTemplate 样版来显示所要编辑的记录;使用者可以在TextBox中编修数据,如下图所示:


    待使用者将数据编辑完毕点选「确定」按钮时,我们就在dlA_ICMD 事件程序中将使用者所作的修改更新回数据源;如下程序代码片段所示:

ElseIf e.CommandSource.Id="lbSubmit" Then
Dim txtTemp As TextBox
txtTemp=e.Item.FindControl("T1") '取回ListItem 中名为T1 的控件参

dtDataTable.Rows(dlA.EditItemIndex)("UserTel")=txtTemp.Text
txtTemp=e.Item.FindControl("T2") '取回ListItem 中名为T2 的控件参

dtDataTable.Rows(dlA.EditItemIndex)("UserAdd")=txtTemp.Text
txtTemp=e.Item.FindControl("T3") '取回ListItem 中名为T3 的控件参

Then
dtDataTable.Rows(dlA.EditItemIndex)("UserEmail")=txtTemp.Text
dscA.Update(dsDataSet,"Members")
dlA.EditItemIndex=-1
End If

    上述程序代码片段宣告一个TextBox 型态的对象变量,用来存放ListItem 中TextBox 控件的参考;此时我们就可以用ListItem 对象的FindControl() 方法来取得指定的控件参考,FindControl只要传入想要传回对象参考的Id 属性即可。最后只要呼叫DataSetCommand 对象的Update 方法,就可以将使用者所作的修改更新回原来的数据源。所以选择「确定」回到SelectedItemTanplate 样版的模式来显示数据时,就可以看到资料已经被更新了;如下图所示:


范例二综合相关事件

<%@Import Namespace=System.Data.ADO%>
<%@Import Namespace=System.Data%>
<Html>
<Form runat="Server">
<ASP:DataList Id="dlA" OnItemCommand="dlA_ICmd"
OnEditCommand="dlA_ECmd"
OnCancelCommand="dlA_CCmd" GridLines="both"
Runat="Server">
<Template Name="ItemTemplate">
<ASP:Image ImageUrl="ico1.gif" Runat="Server"/>
姓名: <%#Container.DataItem("UserName")%>
<ASP:LinkButton Id="lbShow" Text=">" CommandName="Show"
Runat="Server"/>
</Template>
<Template Name="EditItemTemplate">
<ASP:Image ImageUrl="ico1.gif" Runat="Server"/>
姓名: <%#Container.DataItem("UserName")%><br>
电话:<ASP:TextBox Id="T1"
Text='<%#Container.DataItem("UserTel")%>'
Runat="Server"/><br>
住址:<ASP:TextBox Id="T2"
Text='<%#Container.DataItem("UserAdd")%>'
Runat="Server"/><br>
电邮:<ASP:TextBox Id="T3"
Text='<%#Container.DataItem("UserEMail")%>'
Runat="Server"/><br>
<ASP:LinkButton Id="lbCancel" Text="[放弃]" CommandName="Cancel"
Runat="Server"/>
<ASP:LinkButton Id="lbSubmit" Text="[确定]" CommandName="Submit"
Runat="Server"/><br>
</Template>
<Template Name="SelectedItemTemplate">
<ASP:Image ImageUrl="ico1.gif" Runat="Server"/>
姓名: <%#Container.DataItem("UserName")%>
<ASP:LinkButton Id="lbClose" Text="<" CommandName="Close"
Runat="Server"/><br>
电话: <%#Container.DataItem("UserTel")%><br>
住址: <%#Container.DataItem("UserAdd")%><br>
电邮: <%#Container.DataItem("UserEmail")%><br>
<ASP:LinkButton Id="lbEdit" Text="[编辑]" CommandName="Edit"
Runat="Server"/><br>
</Template>
</ASP:DataList>
</Form>
<Script Language="VB" Runat="Server">
Dim dscA As ADODataSetCommand=New ADODataSetCommand("Select * From
Members", _
"Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:InetPubwwwrootCRCh05MyWeb.Mdb")
Dim dsDataSet As DataSet=New DataSet
Dim dtDataTable As DataTable
Sub Page_Load(Sender As Object, e As EventArgs)
dscA.FillDataSet(dsDataSet,"Members")
dtDataTable=dsDataSet.Tables("Members")
dlA.DataSource=dtDataTable.DefaultView
If Not Page.IsPostBack Then Page.DataBind()
End Sub
Sub dlA_ICmd(Sender As Object, e As DataListCommandEventArgs)
If e.CommandSource.CommandName="Show" Then
dlA.SelectedIndex=e.Item.ItemIndex
ElseIf e.CommandSource.CommandName="Close" Then
dlA.SelectedIndex=-1
ElseIf e.CommandSource.CommandName="Submit" Then
Dim txtTemp As TextBox
txtTemp=e.Item.FindControl("T1") '取回ListItem 中名为T1 的控件参

dtDataTable.Rows(dlA.EditItemIndex)("UserTel")=txtTemp.Text
txtTemp=e.Item.FindControl("T2") '取回ListItem 中名为T2 的控件参

dtDataTable.Rows(dlA.EditItemIndex)("UserAdd")=txtTemp.Text
txtTemp=e.Item.FindControl("T3") '取回ListItem 中名为T3 的控件参

dtDataTable.Rows(dlA.EditItemIndex)("UserEmail")=txtTemp.Text
dscA.Update(dsDataSet,"Members")
dlA.EditItemIndex=-1
End If
dlA.DataBind()
End Sub
Sub dlA_ECmd(Sender As Object, e As DataListCommandEventArgs)
dlA.EditItemIndex=e.Item.ItemIndex
dlA.DataBind()
End Sub
Sub dlA_CCmd(Sender As Object, e As DataListCommandEventArgs)
dlA.EditItemIndex=-1
dlA.DataBind()
End Sub
</SCRIPT>
</Html>

上述范例二的执行结果和范例一完全一样。
 
 
  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·DataGrid Web 控件的进阶应用--使  (2005-04-02)
 ·数据的更新  (2005-04-02)
 ·输出数据的润饰  (2005-04-02)
 ·处理表单数据  (2005-04-02)
 ·JSP连接数据库大全  (2005-04-02)
 ·JSP数据库基础知识 语法详解  (2005-04-02)
 ·数据库BEAN:RESIN连接池  (2005-04-02)
 ·Java Servlet开发三层数据库程序  (2005-04-02)
 ·如何利用JSP连接数据库大全  (2005-04-02)
 ·J2EE应用中与Oracle数据库的连接  (2005-04-02)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·ASP.NET中为DataGrid添加合计字段
·.text urlRewrite介绍
·利用 ASP.NET 的内置功能抵御 Web
·ASP.NET Cache
·用 WebClient.UploadData 方法 上载
·ASP.NET 程序设计-序
·什么是客户端/伺服端(Client/Serve
·因特网应用程序的开发
·网页的种类
·.NET Framework-Microsoft Visual
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统