在gridview中动态添加的TemplateField列的事件处理 [英] Event handling for dynamically added TemplateField column in gridview
问题描述
我具有使用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屋!