使用按钮单击动态创建Gridview项模板

本文关键字:Gridview 创建 动态 按钮 单击 | 更新日期: 2023-09-27 18:13:58

asp.net 4.0 forms.

我需要创建一个Gridview动态链接到表ID键按钮。

所以我设置Gridview并开始添加列:

   private void SetupGV()
    {
        try
        { //0
            TemplateField tf = new TemplateField();
            tf.HeaderText = "X";

            tf.ItemTemplate = new AddToItemTemplate();
            GV.Columns.Add(tf);
            //1
            BoundField b = new BoundField();
            b.DataField = "FullName";
            b.HeaderText = @"Staff / Role";
            GV.Columns.Add(b);
....

然后我创建ITemplate AddToItemTemplate:

    public class AddToItemTemplate : ITemplate
    {
        public AddToItemTemplate(){}
        public void InstantiateIn(Control container)
        {
            ImageButton ib = new ImageButton();
            ib.ImageUrl = "~/Content/CIDimg/action4.gif";
            ib.Command += ib_Command;
            ib.CommandName = "delete";
            container.Controls.Add(ib);
        }
        void ib_Command(object sender, CommandEventArgs e)
        {
            string s = e.CommandArgument.ToString();
        }
        #endregion
    }          

我收集我的ID在GV_RowDataBound和设置它在图像按钮命令参数没有问题。

这一切都很好,但方法ib_Command是静态的,因为它是ITemplate的一部分。我不能访问任何页面控件或任何页面实例变量。

是否有一种方法链接按钮(ib.command +=)到任何页面方法,就像它是用"oncommand"标签当gridviews创建在ASPX标记文件?

使用按钮单击动态创建Gridview项模板

根据您的代码和注释,您正在尝试向Gridview添加图像按钮列。为此,您不需要创建一个新的Template。相反,你可以像下面这样添加ButtonField

ButtonField buttonField = new ButtonField();
buttonField.ButtonType = ButtonType.Image;
buttonField.ImageUrl = "~/Images/bullet.png";
buttonField.CommandName = "delete";
GV.Columns.Add(buttonField);

现在在gridview的RowCommand事件中,您可以执行所需的操作

protected void GV_RowCommand(object sender, GridViewCommandEventArgs e)
{
   if (e.CommandName=="delete")
   {
   }
}