在Gridview内响应UserControl内的OnClick

时间:2012-06-19 13:33:16

标签: c# asp.net events

更新

我应该学会更仔细地阅读错误消息。我忘了在gridview的列规范中更改一些ID,这些ID是相同的,导致“多个相同ID”错误。

感谢所有阅读我的问题和曾经试图帮助我的人。我脸上的自由拍打


我正试图从位于GridView内部的usercontrol内的ImageButton获取OnClick或OnCommand事件。我尝试创建图像按钮,因此它会抛出一个命令:

<asp:ImageButton runat="server" ID="exchanceButton" 
        Visible="False" ImageUrl="../Images/Icons/Exchange.png" 
        CommandName="exchanceCommand" CommandArgument="1">

然后在GridView OnRowCommand中捕获它,但是我收到以下错误:找到了具有相同ID“userControlPlan”的多个控件。 FindControl要求控件具有唯一的ID。我尝试过调试但它根本没有到达我的OnRowCommand。

我尝试了以下指南,但没有成功:http://msdn.microsoft.com/en-us/library/bb907626.aspx

我还尝试通过在UserControl中创建自己的事件来运行事件,然后为每个UserControl分配一个监听器:

public delegate void OnExchanceClickDelegate(int id);

public event OnExchanceClickDelegate OnExchangeClick;

protected void exchanceButton_Click(object sender, ImageClickEventArgs e)
{
    if (OnExchangeClick != null)
    OnExchangeClick(1);
}

但是我得到了关于多个控件的相同错误。

您是否有任何建议我如何从UserControl内的ImageButton正确地引发事件到Gridview或其他什么?

2 个答案:

答案 0 :(得分:1)

不确定这是否有帮助。但这就是我为我的网站做的事情:

<asp:ImageButton ToolTip="Download File" ID="lbDownload" ImageUrl="/images/btn_download.gif" 
CommandArgument='<%# Eval("DocumentName") %>' runat="server" CommandName="DownloadDoc"/>

重要的部分是命令名称。

当然使用gridview标记中的OnItemCommand参数。然后在服务器端:

protected void itemCommand(object sender, GridCommandEventArgs e)
{
    if (e.CommandName == "DownloadDoc")
    // Do something...
}

答案 1 :(得分:0)

我解决了这个问题。我的UserControl中确实有重复的ID。我更新了原来的问题。