这两天一直在解决一个问题就是如何使用Datagrid里的“编辑、更新、取消、删除以及添加”按钮来实现对数据的就地编辑?
      看书手头仅有的两本书,它的上面是用Imagebuttom来引到一个新的页面来进行编辑操作,这种方法当然是可以的,它的代码就是下面的样子:

<asp:templatecolumn>
   
<headerstyle witdth="40px"></headerstyle>
   
<itemTemplate>
      
<asp:p_w_picpathbuttom id="edit" runat="server" p_w_picpathurl="p_w_picpaths/edit.gif" commandname="edit" alternatetext="修改" ></asp:p_w_picpathbuttom>
</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

并在更新、删除操作后调用它,结果就可以了。所以看MSDN的这篇文章上的先建立数据集,再绑定,更新后再绑定,应该是合理的做法,但我就没有实现,而是再写了一个过程来帮助实现及时更新的。
     其次还有就是更新操作按着文章上来做底三就出错了,并且我一直也没解决,第三步是这样的:
'在数据表中查找对应的行并更新该行
' Visual Basic
Dim r As dsCategories
.CategoriesRow
= DsCategories1.Categories.FindByCategoryID(key)
r
.CategoryName = categoryName
r
.Description = categoryDescription
SqlDataAdapter1
.Update(DsCategories1)
DataGrid1
.DataBind()
第一句就提示出错,没办法我就自己写更新语句,并执行它,结果能实现更新功能,也就不管它了,我的语句是用Command对象来实现的,比较原始,与文上的做法有出入,不我我一直在研究上面的这个更新方法到底是为什么我就没法执行,等研究出来我再写上来。
     还有就是为了减少页面我想在这个页面同时实现增加记录的功能,我按着文中的思路,先向数据库Insert一个空记录,然后刷新页面,显示新增的空记录,然后我们就可以进行修改。这个我基本上算是做好了,不过QQ技术群里的朋友说这样不好,还是搞个Imagebuttom去另一个页面进行添加比较好,我不以为然。
     最后,想向各位讨教个问题。QQ 技术群里有同志说绑定可以用更简单的方法实现,我还没有找到,各位如果知道就指点一下,先谢过!对,还有上面的更新事件里出错的代码,是为什么?