代码:
CS:
protected void dgMovie_ItemDataBound(object sender, DataGridItemEventArgs e)
{
  ...
  DataGrid dg = new DataGrid();     
  dg.ItemDataBound+=new DataGridItemEventHandler(dg_ItemDataBound);
  dg.ItemCommand+=new DataGridCommandEventHandler(dg_ItemCommand);  
  ...
}
public void dg_ItemDataBound(object sender, DataGridItemEventArgs e)
{
    string s = "";//绑定添加DataGrid绑定事件  这里OK
}
public void dg_ItemCommand(object sender, DataGridCommandEventArgs e)
{
   //绑定添加DataGrid按钮事件  这里不执行没有反应
  if (e.CommandName.Equals("btn_Delete")) 
  {
       BindList();
  }
}
ASPS:
<asp:LinkButton ID="btn_Delete" runat="server" CommandName="btn_Delete" CommandArgument='<%# DataBinder.Eval(Container, "DataItem.MovieOrderID") %>'>删除</asp:LinkButton>
<asp:Button ID="LinkButton1" runat="server" CommandName="btn_Delete" CommandArgument='<%# DataBinder.Eval(Container, "DataItem.MovieOrderID") %>' />
我用两种按钮都没有成功
为什么
ItemDataBound可以执行而ItemCommand不执行

解决方案 »

  1.   

    删除要用DeleteCommand事件,ItemCommand是用作选择或其它的用,给你个代码参考:
        protected void dlShowEmp_ItemCommand(object source, DataListCommandEventArgs e)
        {
            if (e.CommandName == "select")
            {
                this.dlShowEmp.SelectedIndex = e.Item.ItemIndex;
                this.bindEmp();
             }
         }
        protected void dlShowEmp_DeleteCommand(object source, DataListCommandEventArgs e)
        {
                string empID = this.dlShowEmp.DataKeys[e.Item.ItemIndex].ToString();
                DbOperate DO = new DbOperate();
                DO.deleteEmp(empID);
                this.bindEmp();
        }
      

  2.   

    我这里只是说了一个按钮名
    我的按钮并不是说一定是删除的啊
    比如也可以是btn_Add btn_update btn_databind ..
    像这些事件都是可以在ItemCommand里面执行的先不用管我是用来做什么的
    重要的是他这里不执行我的代码
      

  3.   

    ItemCommand要点击按纽才能执行事件
      

  4.   

    因为 ItemDataBound是在绑定是就执行的事件,所以会执行而ItemCommand是必须postback再会执行。而postback后。主datagrid如果没有重新绑定的话。主datagrid的itemdatabound不会执行,也就是说
    dg.ItemDataBound+=new DataGridItemEventHandler(dg_ItemDataBound);
      dg.ItemCommand+=new DataGridCommandEventHandler(dg_ItemCommand);  这两个事件委托不会再执行,所以造成事件丢失。
      

  5.   

    哦。。很有道理
    重新返回一次的时候没有执行DataBound()
    也就没有执行dg.ItemDataBound+=new DataGridItemEventHandler(dg_ItemDataBound);
      dg.ItemCommand+=new DataGridCommandEventHandler(dg_ItemCommand);
    所以就不执行了
    但要是这样的话如何给他加呢
    因为不知道主DataGrid会绑定多少钱,是什么id
    也没有办法在page.load给他们加啊
    那就得在
    page_load
    {
      bindlist()
      if(!ispostback)
      {
      }
    }
    这样了吗,也就是load给多绑一次,但这样总是感觉不是很好
      

  6.   

    但要是这样的话如何给他加呢
    因为不知道主DataGrid会绑定多少钱,是什么id
    ====
    不明白说些什么?
      

  7.   

    if (!this.IsPostBack)
            {            this._BindData();
            }
           foreach(DataGridItem  er in this.DataGrid1.Items)
           {
              //在这里找找这个控件   
           }
      

  8.   


           foreach(DataGridItem  er in this.DataGrid1.Items)
           {
              //在这里找找这个控件   
           }
    也就是在load的时候查找这个控件然后添加事件?