|
|
关于WebForm的编辑列ItemTemplate和EditItemTemplate的一点小总结 |
|
|
作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 |
这两天,发现了好几个类似的帖子在为这个问题发愁,正好今天又来例行公事的加班来了,照样没有什么事情,手一痒痒,决定把这个问题好好整理整理。 首先,描述一下编辑列到底是如何生成的。 请注意,在没有点击编辑之前,模板列里面的EditItemTemplate里面的控件没有生成的。当点击编辑的时候,设置this.DataGrid1.EditItemIndex = ........,然后重新绑定Grid,页面PostBack,根据你指定的第i编辑。才会生成对应的第i的编辑模板里面的控件。而这个时候,对应的这个第i行的ItemTemplate里面的控件是不生成的。 这个我们可以做一个Test 。 上面是一个DataGrid,里面有一个模板列,ItemTemplate里面有一个Label,EditItemTemplate里面有一个DropDownList,下面是后台代码。 页面第一次加载的时候,在事件DataGrid1_ItemDataBound里面设置断点,发现,if(e.Item.ItemType == ListItemType.EditItem)里面的代码根本没有执行。这就说明:页面加载的时候,并没有生成模板列里面的EditItemTemplate的控件。 然后点击编辑。这个时候,发现if(e.Item.ItemType == ListItemType.EditItem)里面的代码执行了。这就可以证明我们开头的结论。如果这个时候,试图去访问ItemTemplate里面的控件,我们这里是Label1,结果是显然不行的,因为这个控件已经不存在了。 在ItemDataBond的条件if(e.Item.ItemType == ListItemTypte.EditItem)里面加上代码, label lb = (Label)e.Item.FindControl("Label1"); if(lb == null) this.Page.Response.Write("Null"); 会发现我们的推论是正确的。 
|
|
相关文章:相关软件: |
|