• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

数据的编辑

发布: 2007-7-14 20:06 | 作者: 佚名    | 来源: 网络转载     | 查看: 18次 | 进入软件测试论坛讨论

领测软件测试网


    下列两个范例都是将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:\InetPub\wwwroot\CR\Ch05\MyWeb.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:\InetPub\wwwroot\CR\Ch05\MyWeb.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>

上述范例二的执行结果和范例一完全一样。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网