当我从后面的代码向GridView Cell添加Button时,LinkBut​​ton的click事件不会调用

时间:2013-01-03 17:06:15

标签: asp.net

我使用下面的代码从when user click on a button后面的代码添加Button到GridView的Cell,但是当我点击我添加的每个按钮时,点击事件(lnk_Click)没有调用,按钮隐藏后我点击我可以解决这个问题吗?

//aspx
    <asp:GridView ID="GridView1" runat="server" GridLines="None" Width="940px"
      OnSelectedIndexChanged="grid_SelectedIndexChanged"
      onrowdatabound="GridView1_RowDataBound" AutoGenerateColumns="False" CssClass="gridview">
       <Columns>
          <asp:TemplateField HeaderText="...">
               <ItemTemplate>
                   <asp:Panel ID="pnlSteps" runat="server"></asp:Panel>
               </ItemTemplate>
          </asp:TemplateField>
       </Columns>
  </asp:GridView>

    //Code behind
    for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                Panel pnl = (Panel)GridView1.Rows[i].Cells[0].FindControl("pnlSteps");
                LinkButton lnk = new LinkButton();
                lnk.Text = "...";
                pnl.Controls.Add(lnk);
                lnk.Click += new EventHandler(lnk_Click);
            }//for
    ...

    protected void lnk_Click(object sender, EventArgs e)
        {
    //...
    }

我用以下代码填充gridview

//dsSet is DataSet that i fill it with data from Database
DataTable dtt = new DataTable();

        dtt.Columns.Add(new DataColumn("status", typeof(string)));
        dtt.Columns.Add(new DataColumn("finantial", typeof(string)));
        dtt.Columns.Add(new DataColumn("phone", typeof(string)));
        dtt.Columns.Add(new DataColumn("name", typeof(string)));
        dtt.Columns.Add(new DataColumn("code", typeof(string)));

        for (int i = 0; i < dsSet.Tables[0].Rows.Count; i++)
        {
            DataRow dr = dtt.NewRow();

            dr[0]=...;
            dr[1]=...;
            dr[2]=...;
            dr[3]=...;
            dr[4]=...;

            dtt.Rows.Add(dr);
        }//for
        GridView1.DataSource = dtt;
        GridView1.DataBind();

//命令 我也使用下面的CommandName并将GridView_RowCommand设置为Gridview的OnRowCommand但不起作用

lnk.CommandName =“选择”;

protected void GridView_RowCommand(Object sender,GridViewCommandEventArgs e) { .....

2 个答案:

答案 0 :(得分:0)

我相信我的更新面板中的链接按钮出现了类似的问题。

我相信我已将此触发器添加到包含网格视图控件的更新面板中。

<Triggers>
     <asp:AsyncPostBackTrigger ControlID="GridView1" EventName="RowCommand" />
</Triggers>

解决此问题。确保您的gridview已初始化onRowCommand="GridView_RowCommand"属性设置,并且您的链接按钮已设置CommandName=""属性。

然后当您的链接按钮事件触发时,您可以确定在GridView_RowCommand内触发它的CommandName。

protected void GridView_RowCommand(Object sender, GridViewCommandEventArgs e) 
{
   if (e.CommandName == "Link Button Command Name")
   {
      // link button
   }
}

如果仍然无法解决您的问题,您可能需要尝试在GridView_RowCreated或页面Pre_Render中创建链接按钮。

答案 1 :(得分:0)

手动添加控件和事件时,必须在每次回发时添加它们。仅将网格数据绑定一次(if(!IsPostBack)),但在每次回发时执行此循环

for (int i = 0; i < GridView1.Rows.Count; i++)
        {
            Panel pnl = (Panel)GridView1.Rows[i].Cells[0].FindControl("pnlSteps");
            LinkButton lnk = new LinkButton();
            lnk.Text = "...";
            pnl.Controls.Add(lnk);
            lnk.Click += new EventHandler(lnk_Click);
        }//for