这两天一直在解决一个问题就是如何使用Datagrid里的“编辑、更新、取消、删除以及添加”按钮来实现对数据的就地编辑?
看书手头仅有的两本书,它的上面是用Imagebuttom来引到一个新的页面来进行编辑操作,这种方法当然是可以的,它的代码就是下面的样子:
很明显这并没有用到Datagrid自身提供的功能按钮,虽然也实现了功能,但是显的有点绕道而行了,我现在要做的是在一个页面里面实现数据的就地编辑(包括增加,修改,更新,删除),在一个表里实现上面的操作。由于手头没有这方面的材料,以前也没有做过,于是我只能到摆渡搜索,但是效果很差没找到自己所要的,于是我想到了MSDN,我在于是我MSDN上的ASP.NET开发中心的主页上打入“如何实现Datagrid的就地编辑”,结果很让人失望,没有找到任何记录,于是我就想把要搜索的再分的更细点,与是我就搜索“ EditCommand ”,结果就是我找到了我昨天发的文章“ 演练:使用 DataGrid Web 控件读取和写入数据”,这就是我要找的知识点,我当时很兴奋,一字一句的看,发现它讲的我基本都懂,但我不一定能做成功,于是按着它的思路我开始做,途中我遇到了很多的麻烦,直到此刻我才真正做成功,下面我就将这个过程简要的介绍一下,顺便让自己回忆一下。
由于Datagrid是单向显示数据的,也就是说,数据绑定从数据源读取数据但不对其进行更新,我们必须写事件来进行更新的相关操作,那么首先可以把你的Dataset或是直接的存储过程里将数据绑定到了网格。
那么我开始做的时候,就犯了个错误,我把dataset 在pageload时候就fill了,并且进行databind,而在后面的操作只用databind绑定一下,并没有使页面重新载入,那么原来在Pageload的读取数据的操作就没法进行,那么我的数据即使操作成功了,在页面上也不会有更新。后来通过仔细研读MDSN上的《演练:使用 DataGrid Web 控件读取和写入数据》,改变了自己的原来的思路,先建立Dataset,然后在到Page_load中去Fill,并进行初始化操作(Databind数据到Datagrid),然后在为了能在编辑操作以后能够在页面上体现出来,我按着MSDN上文章里说的去做,结果没有成功,然后我就专门写了个过程Refreshes
并在更新、删除操作后调用它,结果就可以了。所以看MSDN的这篇文章上的先建立数据集,再绑定,更新后再绑定,应该是合理的做法,但我就没有实现,而是再写了一个过程来帮助实现及时更新的。
其次还有就是更新操作按着文章上来做底三就出错了,并且我一直也没解决,第三步是这样的:
还有就是为了减少页面我想在这个页面同时实现增加记录的功能,我按着文中的思路,先向数据库Insert一个空记录,然后刷新页面,显示新增的空记录,然后我们就可以进行修改。这个我基本上算是做好了,不过QQ技术群里的朋友说这样不好,还是搞个Imagebuttom去另一个页面进行添加比较好,我不以为然。
最后,想向各位讨教个问题。QQ 技术群里有同志说绑定可以用更简单的方法实现,我还没有找到,各位如果知道就指点一下,先谢过!对,还有上面的更新事件里出错的代码,是为什么?
看书手头仅有的两本书,它的上面是用Imagebuttom来引到一个新的页面来进行编辑操作,这种方法当然是可以的,它的代码就是下面的样子:
<
asp
:
templatecolumn
>
< headerstyle witdth = " 40px " ></ headerstyle >
< itemTemplate >
< asp : imagebuttom id = " edit " runat = " server " imageurl = " images/edit.gif " commandname = " edit " alternatetext = " 修改 " ></ asp : imagebuttom >
</ itemtemplate >
</ asp : tempaltecolumn >
< headerstyle witdth = " 40px " ></ headerstyle >
< itemTemplate >
< asp : imagebuttom id = " edit " runat = " server " imageurl = " images/edit.gif " commandname = " edit " alternatetext = " 修改 " ></ asp : imagebuttom >
</ itemtemplate >
</ asp : tempaltecolumn >
很明显这并没有用到Datagrid自身提供的功能按钮,虽然也实现了功能,但是显的有点绕道而行了,我现在要做的是在一个页面里面实现数据的就地编辑(包括增加,修改,更新,删除),在一个表里实现上面的操作。由于手头没有这方面的材料,以前也没有做过,于是我只能到摆渡搜索,但是效果很差没找到自己所要的,于是我想到了MSDN,我在于是我MSDN上的ASP.NET开发中心的主页上打入“如何实现Datagrid的就地编辑”,结果很让人失望,没有找到任何记录,于是我就想把要搜索的再分的更细点,与是我就搜索“ EditCommand ”,结果就是我找到了我昨天发的文章“ 演练:使用 DataGrid Web 控件读取和写入数据”,这就是我要找的知识点,我当时很兴奋,一字一句的看,发现它讲的我基本都懂,但我不一定能做成功,于是按着它的思路我开始做,途中我遇到了很多的麻烦,直到此刻我才真正做成功,下面我就将这个过程简要的介绍一下,顺便让自己回忆一下。
由于Datagrid是单向显示数据的,也就是说,数据绑定从数据源读取数据但不对其进行更新,我们必须写事件来进行更新的相关操作,那么首先可以把你的Dataset或是直接的存储过程里将数据绑定到了网格。
那么我开始做的时候,就犯了个错误,我把dataset 在pageload时候就fill了,并且进行databind,而在后面的操作只用databind绑定一下,并没有使页面重新载入,那么原来在Pageload的读取数据的操作就没法进行,那么我的数据即使操作成功了,在页面上也不会有更新。后来通过仔细研读MDSN上的《演练:使用 DataGrid Web 控件读取和写入数据》,改变了自己的原来的思路,先建立Dataset,然后在到Page_load中去Fill,并进行初始化操作(Databind数据到Datagrid),然后在为了能在编辑操作以后能够在页面上体现出来,我按着MSDN上文章里说的去做,结果没有成功,然后我就专门写了个过程Refreshes
Sub
Refreshes()
objconn = New OleDbConnection(dsn)
objds = New DataSet
objadapter = New OleDbDataAdapter(sql , objconn)
objadapter . Fill(objds , tablename)
s_lists . DataSource = objds . Tables(tablename) . DefaultView
s_lists . DataBind()
objconn . Close ()
End Sub
objconn = New OleDbConnection(dsn)
objds = New DataSet
objadapter = New OleDbDataAdapter(sql , objconn)
objadapter . Fill(objds , tablename)
s_lists . DataSource = objds . Tables(tablename) . DefaultView
s_lists . DataBind()
objconn . Close ()
End Sub
并在更新、删除操作后调用它,结果就可以了。所以看MSDN的这篇文章上的先建立数据集,再绑定,更新后再绑定,应该是合理的做法,但我就没有实现,而是再写了一个过程来帮助实现及时更新的。
其次还有就是更新操作按着文章上来做底三就出错了,并且我一直也没解决,第三步是这样的:
'
在数据表中查找对应的行并更新该行
' Visual Basic
Dim r As dsCategories . CategoriesRow
r = DsCategories1 . Categories . FindByCategoryID(key)
r . CategoryName = categoryName
r . Description = categoryDescription
SqlDataAdapter1 . Update(DsCategories1)
DataGrid1 . DataBind()
第一句就提示出错,没办法我就自己写更新语句,并执行它,结果能实现更新功能,也就不管它了,我的语句是用Command对象来实现的,比较原始,与文上的做法有出入,不我我一直在研究上面的这个更新方法到底是为什么我就没法执行,等研究出来我再写上来。
' Visual Basic
Dim r As dsCategories . CategoriesRow
r = DsCategories1 . Categories . FindByCategoryID(key)
r . CategoryName = categoryName
r . Description = categoryDescription
SqlDataAdapter1 . Update(DsCategories1)
DataGrid1 . DataBind()
还有就是为了减少页面我想在这个页面同时实现增加记录的功能,我按着文中的思路,先向数据库Insert一个空记录,然后刷新页面,显示新增的空记录,然后我们就可以进行修改。这个我基本上算是做好了,不过QQ技术群里的朋友说这样不好,还是搞个Imagebuttom去另一个页面进行添加比较好,我不以为然。
最后,想向各位讨教个问题。QQ 技术群里有同志说绑定可以用更简单的方法实现,我还没有找到,各位如果知道就指点一下,先谢过!对,还有上面的更新事件里出错的代码,是为什么?
本文转自danni505 51CTO博客,原文链接:http://blog.51cto.com/danni505/22697,如需转载请自行联系原作者