Невозможно получить доступ к событию GridView в пользовательском контроле с помощью codebehind
IpInterfaceUC UserControl
<div id="dvChannel" runat="server">
<asp:GridView ID="gvChannelUC"
OnRowCommand="gvChannelUC_RowCommand"
OnSelectedIndexChanged="gvChannel_SelectedIndexChanged"
/>
</div>
Страница IPServices CodeBehind
if (!IsPostBack){
}else
{
string str_btn = Request.Form.Keys[Request.Form.Keys.Count - 1].ToString();
handleClick(str_btn);
}
Вопрос
Он всегда показывает, что str_btn имеет значение null. Если я нажимаю кнопку, он показывает идентификатор кнопки. Но когда я нажимаю кнопку Выбрать в GridView, он показывает, что str_btn равен нулю. Должен отображаться идентификатор GridView, когда мы нажимаем кнопку выбора.
Спасибо за любое объяснение.
2 ответа
Попробуй дать name
приписать к вашему gridview, т.е. name="yourGridName"
,
<div id="dvChannel" runat="server" name="yourGridName">
<asp:GridView ID="gvChannelUC" name="yourGridName"
OnRowCommand="gvChannelUC_RowCommand"
OnSelectedIndexChanged="gvChannel_SelectedIndexChanged"
/>
</div>
Насколько я понимаю, вам нужно передать событие сетки (.ascx) на страницу / codebehind (.aspx).
объявить обработчик событий в userControl
public event EventHandler<EventArgs> RaiseSelectedIndexChanged=delegate {};
обрабатывать событие userControl selectedindexchanged в userControl.cs
protected void gvChannel_SelectedIndexChanged(object sender, EventArgs e)
{
var raiseSelectedIndexChanged = RaiseSelectedIndexChanged ;
if(raiseSelectedIndexChanged!=null)
{
raiseSelectedIndexChanged(sender, e);
}
}
зарегистрируйтесь и используйте свой userControl в aspx (что, я надеюсь, вы уже сделали), этот код перейдет на страницу aspx
<uc:userControl OnRaiseSelectedIndexChanged="OnRaiseSelectedIndexChanged"/>
обработать событие в коде aspx позади
protected void OnRaiseSelectedIndexChanged(object sender, EventArgs e)
{
//handle your event and put logic
}
Надеюсь, я проясню, дайте мне знать, если это вас смущает.