动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
  
   .Net → 阅读文章

 数据的更新

作者来源: 
阅读 数 311 人次 , 2006-3-29 4:30:00 

上述的程序代码范例还不能够将使用者所作的修改更新回数据源,接下来我们将上述程序改成有 数据更新的能力:

<%@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-font-bold="true"
headerstyle-horizontalalign="center"
autogeneratecolumns="false"
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>
<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
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")
dga.datasource=dsdataset.tables("members").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)
bindgrid()
dim shtr as short=(dga.currentpageindex * dga.pagesize) +
dga.edititemindex
dim txttemp as textbox
txttemp=e.item.cells(0).controls(0) '取回第一个储存格中的
textbox
'将数据填回对应的datatable 中
dsdataset.tables("members").rows(shtr)("username")=txttemp.te
xt
txttemp=e.item.cells(1).controls(0) '取回第二个储存格中的
textbox
'将数据填回对应的datatable 中
dsdataset.tables("members").rows(shtr)("usertel")=txttemp.tex
t
'将datatable 的数据更新回数据源
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>

由于我们要在许多程序中和数据源系结,并使用datasetcommand 对象,所以我们将 datasetcommand、dataset 对象宣告在网页阶层的宣告区;并且撰写从数据源取回数据、呼 叫page.databind() 方法的程序bindgrid:

sub bindgrid()
dsca.filldataset(dsdataset,"members")
dga.datasource=dsdataset.tables("members").defaultview
page.databind()
end sub

另外我们也完成将使用者所作的改变更新回数据源的程序dga_ucmd,如下程序代码片段所示:

sub dga_ucmd(sender as object, e as datagridcommandeventargs)
bindgrid()
dim shtr as short=(dga.currentpageindex * dga.pagesize) +
dga.edititemindex
dim txttemp as textbox
txttemp=e.item.cells(0).controls(0) '取回第一个储存格中的
textbox
'将数据填回对应的datatable 中
dsdataset.tables("members").rows(shtr)("username")=txttemp.text
txttemp=e.item.cells(1).controls(0) '取回第二个储存格中的textbox
'将数据填回对应的datatable 中
dsdataset.tables("members").rows(shtr)("usertel")=txttemp.text
'将datatable 的数据更新回数据源
dsca.update(dsdataset,"members")
dga.edititemindex=-1
bindgrid()
end sub

由于我们将数据更新回数据源时,要指定数据在记录的绝对地址;所以我们将数据的绝对位置计 算完毕后存入变量shtr 中,待数据更新时使用。接下来的程序代码将使用者所编修的内容取回, 并存回dataset 对象中,如下程序代码片段所示:

dim txttemp as textbox
txttemp=e.item.cells(0).controls(0)
dsdataset.tables("members").rows(shtr)("username")=txttemp.text

首先我们宣告了一个指向textbox 对象的变量txttemp,并传回datalistitem 中第一个字段的 第一个控件之参考。因为datalistitem 是以表格的方式来呈现字段所以每一个datalistitem 都 有一个cells 集合,用来管理每笔资料所要显示的所有字段,而呈现每个字段的控件被放置于 cell 对象中;如下图所示:
所以要取得显示使用者名称的textbox 控件之内存地址,以下列叙述即可:

txttemp=e.item.cells(0).controls(0)

而假设要取回「放弃」textbox 的内存地址,并将其text 属性显示出来;那么只要写成下列程 序代码片段即可:

txttemp=e.item.cells(2).controls(1)
response.write(txttemp.text)

我们取得textbox 的参考后,就可以将使用者所作的修改更新回datatable 中,如下程序代码 片所示:

dsdataset.tables("members").rows(shtr)("username")=txttemp.text

将所有的字段更新完毕后,最后只要利用datasetcommand 对象的update 方法将数据更新回 数据源即可。
 
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:TemplateColumn
· 下一篇:EditCommandColumn
· asp.net中的vb7中如何调用dll中的函数
· ASP.NET 链接数据库基础
· 基于.net的快速开发思想
· ASP.NET中的Code Behind技术(2)
· [DNN模块开发]如何写模块数据库安装脚本


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077