我在datagrid的一个模板列里动态添加啊了1个按钮
但是响应不了事件..大家帮我看看好吗,我的代码如下:
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
     LinkButton lb=new LinkButton();
     lb.Text="交费";
lb.CommandName="lb";
         (e.Item.Cells[5]).Controls.Add(lbtnPaid);
}
public void datagrid_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
                       if(e.CommandName=="lb")
{Response.Redirect("Add.aspx"); }

解决方案 »

  1.   

    按钮列
    按钮列允许您添加带按钮的网格列,这些按钮允许用户执行特定的功能(例如,选择/删除当前行、将当前行置于编辑模式)。您可为预定义的功能创建按钮,或者创建自己的功能(例如,“添加到购物车”按钮)。可以定义两种类型的按钮列: 根据预定义,EditCommandColumn 元素包含三个按钮。在显示模式中,该列显示一个“编辑”按钮,用户单击此按钮可将行置于编辑模式(带有可编辑的控件)。当行处于编辑模式时,“编辑”按钮被替换为两个按钮:“更新”按钮和“取消”按钮。您可指定按钮的文字(标题)。 
    ButtonColumn 元素可以包含任意按钮。使用 ButtonColumn 元素,您可以定义某种预定义的功能(例如,选择行或删除行),或创建您自己的功能按钮。 
    当为按钮列定义按钮时,指定按钮的文字(标题)和按钮类型(LinkButton 或 Button)。另外,对于 ButtonColumn 元素中的按钮,请指定特殊的 CommandName 属性。此属性的设置可决定单击该按钮时发生的结果。例如:设置 结果 
    选择 单击此按钮可自动选择行。 
    删除 单击此按钮可引发 DataGrid 控件的 DeleteCommand。 
    自定义(非预定义的)值 单击此按钮可引发 DataGrid 控件的一般 ItemCommand。 注意   CommandName 属性的设置是区分大小写的。
    大多数情况下,单击按钮都会引发事件,随后您可以处理该事件。(如果 CommandName 属性设置为“选择”,则会引发“选择”事件,但网格会自动处理该事件,以选择指定的行。)通常,您要在处理程序中确定受到影响的行和相应的操作,例如,将该行设置为编辑模式(或取消该设置),删除该网格行表示的数据行,等等。对于自定义按钮,网格会引发 ItemCommand 事件并将 CommandName 属性的值作为 EventArgs 对象的一部分传递。有关在 Visual Studio Web 窗体设计器中创建按钮列的详细信息,请参见“向 DataGrid Web 服务器控件添加按钮列”。有关创建按钮列的详细信息,请参见 DataGrid Web 服务器控件。
      

  2.   

    用ButtonColumn 而不是LinkButton
      

  3.   

    不是..我在datagrid你已经有一个ButtonColumn了..是个空的e.Item.Cells[5]就是模板列
    我现在就是想在这你动态添加按钮,然后点击执行事件
      

  4.   

    http://community.csdn.net/Expert/topic/4342/4342425.xml?temp=.7336237
    你看下这个帖子,咱们的saucer大大解释的很清楚
      

  5.   

    不是啊..他的是2个按钮..一个linkbutton一个button,button没反映但linkbutton可以我的是都不可以..他的是加了if(!Page.IsPostBack)就好了..可我的根本不能加啊
      

  6.   

    我的Page_Load里是空的...我是点击搜索后查找..
    我不知道该怎么做了..唉
      

  7.   

    将(e.Item.Cells[2]).Controls.Add(lbtnPaid)改为(e.Item.Cells[2]).Controls.Add(lb)
    试试吧。
      

  8.   

    楼上的..对不起...lbtnPaid是我程序里起的名字..发上来怕看的麻烦就都改成简单的了.那个是改漏了...和哪个没关系
      

  9.   

    你在add时用的控件名是lbtnPaid,你声明时用的是lb.不一样呀。
      

  10.   

    唉..请问能告诉我怎么改么if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
         LinkButton lb=new LinkButton();
         lb.Text="交费";
         lb.CommandName="lb";
         (e.Item.Cells[5]).Controls.Add(lb);
    }
    public void datagrid_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
       if(e.CommandName=="lb")
    {
    Response.Redirect("Add.aspx");
    }
      

  11.   

    <asp:imagebutton id="ImageButton11" CommandName="lb">
    中有CommandName="lb"吗?
      

  12.   

    LinkButton lb=new LinkButton();
      lb.Text="交费";
      lb.CommandName="lb";
    楼上..我是再程序里添加得,现在问题是..根本就没有跳到事件里..我是真的不知道该怎么改..大家帮帮我好嘛
      

  13.   

    告诉你一个方法。将你动态生成按钮的代码先删除,然后在 Page_Load中,添加如下的动态生成的代码:
                      foreach(DataGridItem dgi in DataGrid1.Items)
    {
    LinkButton lb=new LinkButton();
    lb.Text="交费";
    lb.CommandName="lbl";
    dgi.Cells[5].Controls.Add(lb);
    }
    就可以了 。
      

  14.   

    补充..我的datagrid是在点击搜索按钮之后再绑定的
      

  15.   

    if(!Page.IsPostBack)
    {
    foreach(DataGridItem dgi in dgList.Items)
    {
    LinkButton lb=new LinkButton();
    lb.Text="交费";
    lb.CommandName="lbl";
    dgi.Cells[5].Controls.Add(lb);
    }
    }private void btnSearch_Click(object sender, System.Web.UI.ImageClickEventArgs e)
    {
    #region 搜索
    strErr =""; 
    this.Search();
     
    #endregion
    }private void Search()
    {
    #region 搜索方法#region 绑定dg
    DataTable dtProject;
    ObjDepositMgmt.ListProject(ObjInfo,out dtProject ,out strErr);
    this.DataPager1.RecordCount=dtProject.Rows.Count;
    this.DataPager1.CurPageIndex=DataPager1.CurPageIndex;
    this.dgList.PageSize=this.DataPager1.PageSize;
    this.dgList.CurrentPageIndex=(this.DataPager1.CurPageIndex-1)>0?this.DataPager1.CurPageIndex-1:0;
    this.dgList.DataSource=dtProject;
    this.dgList.DataBind();
    #endregion
    #endregion
    }
    public void dgList_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    { #region 操作
    // if(e.CommandName=="lb")
    // {
    // #region 标书购买操作
    // Response.Redirect("AddDeposit.aspxID");
    // #endregion
    // }
    switch(Convert.ToString(((LinkButton)e.CommandSource).CommandName))
    {
    case "lb":                    
    Response.Redirect("AddDeposit.aspx");
    break;
    }             #endregion
    }
      

  16.   

    liujingchao111我把你说的那段加到了搜索方法里..按钮出来了..但是还是不响应事件
      

  17.   

    首先,你如果有ItemDataBound事件,先注释掉。动态添加按钮的代码一定要添加在Page_Load中(注意不要添加在if(!IsPostBack)中).因为你每次点击按钮是,程序先运行page_load中的代码,然后运行DataGrid_ItemCommand中的事件,如果在page_load中没有再次动态生成按钮,则以前动态生成的按钮会消失,更谈不上有按钮的事件了 。你自己好好看看代码,模板列的cells是不是正确。我这能实现,你那也行的。
      

  18.   

    还有我的lb.CommandName改名了,你自己改回来。
      

  19.   

    我知道啊...只是现在按钮都出不来啊..我是点击搜索后才绑定datagrid的
      

  20.   

    ....唉..我的目的其实是要实现...如果已经付费就再datagrid的列里显示退还和付费2个按钮,并可以点击连接到其他页面,如果没付费就只显示一个付费按钮,请问除了动态添加按钮外有别的方法吗
      

  21.   

    public void datagrid_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
       if(e.CommandName=="lb")
    {
    Response.Redirect("Add.aspx");
    }
    这个事件名好象要写成是  onpageclick  之类的
      

  22.   

    你也可以在模板列里,拖拽两个按钮,设置他的隐藏属性,如果都显示则两个按钮的visible为true,显示一个则这个的visible为true。这样就好控制了。
      

  23.   

    对啊..怎么访问模板里的按钮???
    在ItemTemplate里面加入的按钮,如何在程序代码中访问...关注中.....
    另外,楼主那个问题的确可以用 隐藏 按钮的 方式完成, 不用动态添加按钮.用 隐藏按钮的方式更方便.我看好多案例都是那么实现的.