2009-07-25 71 views
0

我创建了一个包含LinkBut​​tons(和其他信息)表的用户控件。我在另一个自定义对象中创建表行并使用这些表行的某些单元格中的链接按钮返回一个TableRowCollection。从自定义对象添加事件处理程序到用户控件

在用户控件背后的代码中,我为这些LinkBut​​ton的按钮单击创建了一个事件处理程序。我将用户控件传递给方法调用来创建表格行(使用“this”),然后尝试将事件处理程序添加到LinkBut​​ton的“Click”中。出于某种原因,事件处理程序不会在由此按钮引起的回发中触发。任何想法,我可以做什么,使这个事件火?

这里就是我创建按钮并添加事件处理代码:

LinkButton button = new LinkButton(); 
button.Text = movie.Title; 
button.Click += new EventHandler(control.Link_Click); 
button.CommandArgument = result.LocalID.ToString(); 
cell1.Controls.Add(button); 

其中“控制”是传过来的参数和“Link_Click”的用户控件事件处理程序。

在此先感谢!

回答

1

首先,如果事件处理程序已经在用户控件中,则不需要将引用传递给它自己的方法。您可以简单地访问事件处理程序中的任何属性或方法。

事件依赖于控件ID来连接到正确的控件。如果你没有在回发中每次都以同样的方式创建链接按钮,并确保它们具有与以前相同的ID,那么你的事件处理程序将不会触发,因为ASP.Net管道将无法启动找到它认为它是控制树中正确的按钮。

此外,如果您在每次回发时将用户控件重新绑定到其数据源,则可能会导致某些控件的事件丢失,原因与上述相同。

检查以确保您每次都正确地重新创建控件,并且每次都不重新绑定您的用户控件。

+0

谢谢!这有帮助。我认为问题在于我创建了这些控件OnPreRender(事件处理程序触发后,因此在事件处理程序触发时LinkBut​​tons不存在)。我无法更快地创建按钮,因为我没有尽快为他们提供数据。我想我可能不得不考虑如何做某种JavaScript解决方法。 再次感谢! – Nutzy 2009-07-25 22:58:38