这是我期望达到的效果,即按了“编辑”按钮之后,在EditCommandColumn之前的BoundColumn里的Editbox中,显示的是数据库中帮定的行的内容
而之前的页面的页面如下:
出现的错误情况是:点击“编辑”按钮一下,没有反应,非要点击几下才会出现Editbox,同样的情况出现在“更新”和“取消”按钮上。
之后的问题原因找到是IsPostBack 的原因,我写了一个LoadData()函数,用来绑定数据库到DataGrid控件,结果不小心把IsPostBack 写进了这个函数,然后再很多函数中调用这个函数,包括EditCommand,UpdateCommand,DeleteCommand,CancelCommand等处理函数中,也调用了这个函数,结果出现了上述的情况。
之后我把这个IsPostBack删除,只写道Page_Load函数中,就一切正常了。
IsPostBack
在MSDN中的解释是:
获取一个值,该值指示该页是否正为响应客户端回发而加载,或者它是否正被首次加载和访问。
命名空间:System.Web.UI
程序集:System.Web(在 system.web.dll 中)
而其他找到的资料是这么说的:
IsPostBack是为了:
在ASP.NET使用Page.IsPostback,那么就可以避免往返行程上的额外工作:如果处理服务器控件回发,通常需要在第一次请求页时执行代码,该代码不同于激发事件时用于往返行程的代码。如果检查?Page.IsPostBack?属性,则代码可按条件执行,具体取决于是否有对页的初始请求或对服务器控件事件的响应。这样做似乎很明显,但实际上可以忽略此项检查而不更改页的行为。该属性用的好坏,直接关系到你程序运行是否按照你最初的意愿,也关系到整个页面的效率。因为,如果每次都会给控件绑定数据,不管你是第一次访问,还是提交了数据以后,那么这个页面程序的效率可想而知。
IsPostBack指判断该webform是否为响应客户端而发的
简单来说就是判断是否是webform首次访问
IsPostBack所指一般为第二次及其以后的访问
!IsPostBack才为首次访问
个人总结是:
在点击服务器控件的时候,如Button等时,每点击一次,如果没有IsPostBack判断,就会从数据库中重新绑定数据到DataGrid,然后刷新页面,这就是往返行程的代码,而重新刷新后在页面中的输入数据,则会被忽略而不被交换到服务器端。
所以要用Page.IsPostBack来判断一下。
不过还是没有很理解,再找点资料看看吧!