解决办法:
你放在OnItemDataBound中处理,并且判断ItemType为EDIT的时候才做就可以实现你的目标了
原因:
在Edit这个事件中,EditItemTemplate里的控件其实还没建立
他的前提条件是要数据绑定以后,并且要通过OnEditCommand事件才后才能被建立,这也就是为什么Update事件又可以如常操作的原因了
类似的代码如这样
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
ListItemType itemtype = e.Item.ItemType;
if (itemtype == ListItemType.EditItem)
{
CheckBoxList chk = (CheckBoxList)e.Item.FindControl("chkClientType");
这个就可以达到你的要求了,这个也应该是一个比较标准且完美的处理方式。
关于这个问题,我的朋友飞刀他有另外的一些解决方法,下面我引用他的文章,也可以给你做个参考
(2)FindControl方法的问题
问题:
大家都知道所有控件集合都存在有一个FindControl方法,一般最常用的地方就是DataGrid对Item中控件的操作。这是一个很好用的方法,可以让我们迅速地找到我们想要的控件,但是他也是我遇到过的最不稳定的方法。
在Item中使用这个方法,一般不会出现什么问题,但是在DataGrid、DataList的各种事件中这个方法经常是找不到控件!!DataGrid还好一点,DataList的事件中发生的情况就惨不忍睹,100%的找不到控件!!这个控件是活生生存在的,使用Controls集合中是可以发现这个控件的。这个问题我在Beta2下就已经发现了,原以为微软会在正式版本中更正,不知道是没有人提出呢?还是没有发现,正式版中依然这样。