Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# gridView中动态创建的按钮未激发行命令事件_C#_Asp.net_Gridview - Fatal编程技术网

C# gridView中动态创建的按钮未激发行命令事件

C# gridView中动态创建的按钮未激发行命令事件,c#,asp.net,gridview,C#,Asp.net,Gridview,我有一个GridView,在其中动态创建gv_RowDataBound上的标签和按钮 .cs 问题是“RowCommand”函数没有被触发。因此,我无法访问e.CommandName==“删除” 如何为GridView中动态创建的按钮触发RowCommand事件 感谢您的帮助 *******编辑 .aspx //**这里我添加了动态按钮 问题是您正在创建button gv_RowdataBound事件 当你点击按钮时,页面会被重新加载,按钮会被激活 这次没有创建,因为您已在 gv_RowDa

我有一个GridView,在其中动态创建gv_RowDataBound上的标签和按钮

.cs

问题是“RowCommand”函数没有被触发。因此,我无法访问e.CommandName==“删除”

如何为GridView中动态创建的按钮触发RowCommand事件

感谢您的帮助

*******编辑

.aspx


//**这里我添加了动态按钮
问题是您正在创建button gv_RowdataBound事件 当你点击按钮时,页面会被重新加载,按钮会被激活 这次没有创建,因为您已在 gv_RowDataBound事件。因此按钮将不起作用,因为没有 按钮

你应该这样试试

我不确定它是否100%有效,但至少你应该试试这个

更新 如果要在页面加载时绑定gridview,则必须使用以下代码

因为如果您每次绑定gridview,它可能会取消按钮单击的效果

试试这个

 protected void Page_Load(object sender, EventArgs e)
    {
       if (!IsPostBack) 
       {
        gridbind();
       }      
    }

回答自己的问题感觉很好。 我尝试了以下方法:

    //**OnPage Load
     if (IsPostBack)
        {
            //String ButtonID = Page.Request.Params["__EVENTTARGET"];

            Control c = GetPostBackControl(this.Page);
            if (c != null)
            {
                //...
                var ID = c.ID;
            }
            else
            {
                Mygv.DataBind();
            }
        }

     protected Control GetPostBackControl(Page page)
      {
        Control control = null;

        string ctrlname = page.Request.Params.Get("__EVENTTARGET");
        if (ctrlname != null && ctrlname != string.Empty)
        {
            control = page.FindControl(ctrlname);
        }
        else
        {
            foreach (string ctl in page.Request.Form)
            {
                Control c = page.FindControl(ctl);
                if (c is System.Web.UI.WebControls.Button)
                {
                    control = c;
                    break;
                }
            }
        }
        return control;
    }
在这里,我首先找到导致回发的控件。 如果控件为(非NULL),即(如果不是动态创建的)控件,则不要回发。
Else为动态创建的控件回发。

Delete可能与inbuild事件冲突,因此请将名称更改为deleterow或其他名称,然后重试。似乎不起作用。问题是“RowCommand”事件本身没有被调用。您是否已将RowCommand事件添加到gridview?我已经添加了。Gridview中的其他按钮工作正常。这个问题只适用于动态创建的按钮。还有一件事,你是如何绑定网格视图的?
protected void Page_Init(object sender, EventArgs e)
    {
        GridView1.DataBind(); //Key code
    }

    protected void gv_DataBound(object sender, EventArgs e)
    {
        
                Button delete = new Button();
               delete.ID = "btnDelete_" + i;
                delete.ToolTip = "Delete";
               delete.CssClass = "tagBubbleDelete";
               delete.CommandName = "Delete";
               delete.CommandArgument = imageID.Text;
            
        
    }

    protected void gv_RowCommand(object sender, CommandEventArgs e) //Your grid view function change accroding you need!!
    {
        if (e.CommandName == "Delete")
        {

        }
    }
 protected void Page_Load(object sender, EventArgs e)
        {
           if (!IsPostBack) 
           {
            YourGridviewbindCode(); //Key code
            }      
        }
 protected void Page_Load(object sender, EventArgs e)
    {
       if (!IsPostBack) 
       {
        gridbind();
       }      
    }
    //**OnPage Load
     if (IsPostBack)
        {
            //String ButtonID = Page.Request.Params["__EVENTTARGET"];

            Control c = GetPostBackControl(this.Page);
            if (c != null)
            {
                //...
                var ID = c.ID;
            }
            else
            {
                Mygv.DataBind();
            }
        }

     protected Control GetPostBackControl(Page page)
      {
        Control control = null;

        string ctrlname = page.Request.Params.Get("__EVENTTARGET");
        if (ctrlname != null && ctrlname != string.Empty)
        {
            control = page.FindControl(ctrlname);
        }
        else
        {
            foreach (string ctl in page.Request.Form)
            {
                Control c = page.FindControl(ctl);
                if (c is System.Web.UI.WebControls.Button)
                {
                    control = c;
                    break;
                }
            }
        }
        return control;
    }