帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统v4.6
栏 目:
 
您的位置:首页 > 技术文档 > 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编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·帝国网站管理系统采集使用教程
·帝国网站管理系统模板制作教程
·帝国CMS模板下载
·Discuz6.0.1UC版通行证发布
·帝国网站管理系统之网站迁移教程
·帝国网站管理系统实例入门教程下载
·《帝国网站管理系统》实例入门教程
   类别最新
·ASP.NET中为DataGrid添加合计字段
·.text urlRewrite介绍
·利用 ASP.NET 的内置功能抵御 Web
·ASP.NET Cache
·用 WebClient.UploadData 方法 上载
·ASP.NET 程序设计-序
·什么是客户端/伺服端(Client/Serve
·因特网应用程序的开发
·网页的种类
·.NET Framework-Microsoft Visual
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统