无法通过代码隐藏在用户控制下访问GridView事件

时间:2013-01-07 04:23:13

标签: c# asp.net user-controls code-behind webusercontrol

IpInterfaceUC UserControl

<div id="dvChannel" runat="server">
        <asp:GridView ID="gvChannelUC" 
            OnRowCommand="gvChannelUC_RowCommand"
            OnSelectedIndexChanged="gvChannel_SelectedIndexChanged"
        />
</div>

IP服务页面CodeBehind

if (!IsPostBack){
}else
{    
 string str_btn = Request.Form.Keys[Request.Form.Keys.Count - 1].ToString();
 handleClick(str_btn);
}

问题

它始终显示 str_btn 为null。如果我单击Button,它将显示按钮的id。但是当我在GridView上单击Select时,它显示 str_btn 为null。当我们点击选择时,应该显示GridView的id。

感谢您的解释。

2 个答案:

答案 0 :(得分:0)

尝试为您的gridview提供name属性,即name="yourGridName"

<div id="dvChannel" runat="server" name="yourGridName">
        <asp:GridView ID="gvChannelUC" name="yourGridName"
            OnRowCommand="gvChannelUC_RowCommand"
            OnSelectedIndexChanged="gvChannel_SelectedIndexChanged"
        />
</div>

答案 1 :(得分:0)

根据我的理解,你需要在页面/代码隐藏(.aspx)上进行网格事件处理(.ascx)。

在userControl中声明eventhandler

 public event EventHandler<EventArgs>  RaiseSelectedIndexChanged=delegate {};

在userControl.cs中处理userControl selectedindexchanged事件

   protected void gvChannel_SelectedIndexChanged(object sender, EventArgs e)
    {
        var raiseSelectedIndexChanged = RaiseSelectedIndexChanged ;
        if(raiseSelectedIndexChanged!=null)
        {
            raiseSelectedIndexChanged(sender, e);
        }
    }

在aspx中注册并使用你的userControl(我希望你已经这样做了)这段代码将进入aspx页面

        <uc:userControl OnRaiseSelectedIndexChanged="OnRaiseSelectedIndexChanged"/>

在aspx代码后面处理事件

    protected void OnRaiseSelectedIndexChanged(object sender, EventArgs e)
    {
       //handle your event and put logic 
    }

我希望我说清楚,让我知道它是否会让你感到困惑。