在gridview中动态添加的TemplateField列的事件处理 [英] Event handling for dynamically added TemplateField column in gridview

查看:155
本文介绍了在gridview中动态添加的TemplateField列的事件处理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我具有使用ITemplate接口和InstantiateIn()方法动态添加的templatefield的gridview控件,如下所示.

Hi,

I have gridview control with dynamically added templatefield using ITemplate interface and InstantiateIn() method which is as follows.

public class MyTemplate:ITemplate
   {
       #region ITemplate Members
       public void InstantiateIn(Control container)
       {
           //EventHandlerClass MyEventClass = new EventHandlerClass();
           LinkButton link = new LinkButton();
           link.ID="lnk";
           link.CommandName="Update";
           link.EnableViewState = true;
           link.Text="Update";
           link.ToolTip="Click to Update Details";
           //link.Click+=new DelegateClickEvent(MyEventClass.Show);

           container.Controls.Add(link);
       }
       #endregion
   }


我可以成功地将itemtemplate链接按钮添加到gridview,但是我被困在linkbutton(ItemTemplate)列的hadle事件上.即使无法触发GridView事件GridView_RowCommand(),即单击链接按钮事件后也不会触发.

请同样帮我.

预先谢谢您.


I am successfully able to add itemtemplate link button to gridview but I am stuck to hadle Events for linkbutton(ItemTemplate) column. Even unable to fire GridView event GridView_RowCommand() i.e after clicking link button event doesn''t get fired.

Please help me on the same.

Thank you in advance.

推荐答案

Hello Shashank,

您需要将click事件起泡到其命名容器,即GridView:
Hello Shashank,

you need to bubble up the click event to its naming container i.e. GridView:
public class MyTemplateField : Control, ITemplate
    {
        Button btnCommand;
        public string CommandName { get; set; }
        public MyTemplateField()
        {
            btnCommand = new Button();
            btnCommand.ID = "btnInTemplateField";
            btnCommand.Text = "Template Field''s button";
            btnCommand.Click += new EventHandler(btn_Click);
            CommandName = "Update";
        }
        void btn_Click(object sender, EventArgs e)
        {
            //Create command event arguments
            CommandEventArgs commandEventArgs = new CommandEventArgs(this.CommandName, btnCommand);
            //Bubble the command event to the container of MyTemplateField i.e. GridView
            RaiseBubbleEvent(btnCommand, commandEventArgs);
        }
        public void InstantiateIn(Control container)
        {
            container.Controls.Add(btnCommand);
        }
    }



希望这会有所帮助.

谢谢,
Hemant



Hope this will help.

Thanks,
Hemant


@ Hemant-Sharma很好.创建动态控件后,ASP.Net不会保留它们.除非您要求将每个帖子都返回到Page_Load()或其他地方.例如
@Hemant-Sharma is wright. ASP.Net doesn''t retain dynamically created controls once there are created. Unless you call for each post back on Page_Load() or somewhere else. For example
protected void Page_Load(object sender, EventArgs e)
{
    LinkButton lb = new LinkButton();
    lb.Text = "Click me"
    lb.Click += new EventHandler(clickMe);
    this.Panel1.Controls.Add(lb);
}
private void clickMe(object sender, EventArgs e)
{

}



每次点击链接按钮都会引发事件,最终会回发信息.如果不这样做,它就不会保留它的事件.

我希望这会给你一个线索.



The link button will raise it''s event whenever click, which eventually calls a post back. Without doing this it won''t retain it''s event.

I hope this will give you a clue.


这篇关于在gridview中动态添加的TemplateField列的事件处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆