有关ItemCreated和ItemDataBound与ItemCommand的理解

来源:互联网 发布:淘宝等级怎么看买家 编辑:程序博客网 时间:2024/05/22 15:40

当创建 DataGrid 控件中的项时(不论是在往返行程中还是在将数据绑定到控件时),都会引发 ItemCreated 事件。

ItemCreated 事件通常用于控制 DataGrid 控件中行的内容和外观。

当项被数据绑定到 DataGrid 控件后,将引发 ItemDataBound 事件。此事件为您提供了在客户端显示数据项之前访问该数据项的最后机会。当引发此事件后,该数据项将被设为空,并且不再可用。

当单击 DataGrid 控件中的任一按钮时会引发 ItemCommand 事件。此事件常用于处理在 DataGrid 控件中具有自定义 CommandName 值(如 Add)的按钮控件。

一般情况是这样的

顺序如下:  
   
  ItemCreated     //建立控件  
  ItemDataBound     //绑定数据  
  ItemCommand     //这个是用户触发 

 

DataGrid嵌套DataGrid

开发过程中用到了DataGrid嵌套DataGrid的问题:
在嵌套的DataGrid里,怎么调用(包含模版非模版)编辑、删除功能。
===================================

在单个DataGrid的操作里对于模版或非模版的编辑删除都很容易实现的,特别是对于非模版的DataGrid,在属性生成器里点两下.cs文件就自动自成代码(感觉在玩VB)。然而对于嵌套在DataGrid或DataList里的DataGrid确没有这样的操作方法,要自行加入梆定代码。

把摸索过程粘贴出来大家看看!
----------------------------

主DataGrid名:dgM
嵌套Datagrid名:dgD

我们可以在界面拖入dgM时生成会在函数:
private void InitializeComponent()
{
   
this.dgM.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.dgM_ItemDataBound);
   this.Load += new System.EventHandler(this.Page_Load);
}

上面
绿色字段为VS.net自动生成的。但在嵌套的dgD里VS.net却没有这样的生成方法。唯有自己用动添加。而添加梆定方法不应该在dgM_ItemDataBound方法里添加(这里有个误区,自己就在这个误区里徘徊了许久),应该在dgM_ItemCreated方法里添加。如:
private void dgM_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
  {
   if ( e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem )
   {
    
dgDList = (DataGrid)e.Item.FindControl( "dgD" );
    dgDList.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler( this.dgD_ItemDataBound );
    dgDList.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgD_ItemCommand);

   }
  }
如果上面绿色代码是添加在dgM_ItemDataBound方法里,那么dgD_ItemCommand这样的命令是不能调用的。

现在可以加入dgD的梆定和操作方法了,如:
private void dgD_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  {
        //.......
    }

---------------------------------------------------

另,根据代码的调试得出:
如果在PageLoad()中加入了如
if ( ! this.Page.IsPostBack )
   {
    this.BindData();
   }
这样的代码后,在DataGrid里用编辑、删除等操作时(即服务器控件),DataGrid是不再梆定的,即:DataGrid不再会执行_ItemDataBound这个方法。但_ItemCreated此方法却会执行。这就是为什么不把代码放于_ItemDataBound方法内的原因。

原创粉丝点击