在ASP.NET开发过程中,使用GridView进行数据表现的时候遇到过两次取不到值的问题。分别是初学的时候与
用了一年多以后。出现的问题并不是身边么高深的技术,但是可能会经常遇到,所以这里我做一下总计。GridView
取不到值的情况主要是在使用GridView中自带的编辑的过程中取不到TextBox的值。但是问题源就不只一个了。
1.回传后重新绑定(IsPostBack)
这个问题并不是GridView这一个控件的问题。其他控件也有可能存在同样的问题。大家都知道我们在页面中
的Page_Load事件中经常会写:
if(!IsPostBack)
{
//数据绑定
}
来避免不必要的数据回传。当在使用GridView过程中。如果数据绑定没有写在上面if块内,那么页面当我们使用
GridView中“编辑”功能点击“更新”时触发页面数据回传。首先执行 Page_Load事件。那么GridView就会
重新绑定。那么我们点击“更新”的时候取到的值就会是GridView 重新绑定后的值。这个就不用做过多解释了,只要
是搞过的人就会明白。
2.使用了模板列(ItemTemplate)
这个问题并不多见,用的时候比较巧合。出现的情况就是当我点击“编辑”中“更新”按钮的时候取值只有取到绑定
到上面的值,但是取不到要更新的值。问题出在哪里呢???下面这段关于GridView的这段代码就会出现这个问题。。
Code
问题就出在使用了模板列与GridView自带的更新事情。由于回传后GridView先执行了RowCommand事件,然后才执行
RowUpdating事件,而且在RowCommand事件中执行了Bing()方法。所以当RowUpdating执行的时候获得的值是
GridView重新绑定的值。
解决办法就是:
1.不使用RowUpdating,而是使用RowCommand事件进行数据修改。
2.或者当RowUpdating执行时RowCommand不进行绑定。对于上面的修改就是把Bing移动到if块里面。