DataGrid(自动创建列)在绑定数据后,一般在(非grid事件触发导致的)页面回发时,是不需要重新绑定的,DataGrid仍然显示回发前的数据。但当Datagrid 处于“Edit”(编辑)模式时,就需要重新绑定,否则编辑行全是空值。假如我们取消编辑(并重新绑定),那么已编辑的值被数据源中的原始值覆盖。
       那么为什么需要重新绑定呢?本来不“Edit”的时候,数据来来回回都能显示,为什么一编辑,Grid就不知道原来数据了?需要再次绑定--给它数据。
       从模本列(ItemTemplate)的使用过程出发,或许能理解这一点。模板列为了更灵活的控制grid的显示,对编辑(可能使用TextBox)和正常显示(Literal)状态都可以灵活定制,而每种状态下的数据都可以灵活呈现。因此,在切换状态时,Grid可能由于不知道它需要如何显示数据,而干脆不显示数据。不过事实正好相反,当Grid没有使用模板列指定编辑状态下显示控件时,默认将是TextBox,既然Bill知道这一点,也知道回发回来的数据(原Grid的数据),它为什么不自动赋值?而一次次叫大家重新绑定?
      从另一个角度去看,假如对Grid的每一列都使用模板列动态创建,它的正常显示状态,也就是模板列的ItemTemplate,都以TextBox方式显示数据而不是使用Literal。此时整个Grid显示出来时,每个单元格都是可以直接编辑的。那么页面回发后,假如不重新绑定的话,那么已编辑的值不会被数据源中的原始值覆盖,这是可以理解的。当假如重新绑定,还记得第一段的“覆盖”吗?
       这个问题或许可以如此猜测:页面回发是包含动态创建的页面,以及相关数据。但回发后Asp.net依照原始页重新创建该页,并比照回发的页数据,把该保存状态的数据重新填上。那这机制究竟是什么呢?