Событие GridView RowCommand не срабатывает
У меня есть GridView, который выглядит примерно так:
<asp:GridView
ID="GridView1"
AllowPaging="true"
OnRowCommand="RowCommand"
OnPageIndexChanging="gridView_PageIndexChanging"
Runat="server">
<Columns>
...
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="Button1" ButtonType="Button" CommandName="ItemExport" CommandArgument='<%# Eval("EXPORT") %>'
Text="Export" runat="server" />
</ItemTemplate>
</asp:TemplateField>
...
</Columns>
</asp:GridView>
Вот RowCommand:
protected void RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "ItemExport")
{
// etc.
}
}
Нажатие кнопки вовсе не запускает событие RowCommand. Однако RowCommand срабатывает, когда я щелкаю индекс страницы на пейджере GridView.
8 ответов:
Вы должны Не привязывать свою сетку к обратным ссылкам в Page_Load, только когда что-то изменилось,что заставляет сетку перезагружать данные(например, сортировка, подкачка) и только в соответствующих обработчиках событий.
Еще одна возможная причина: вы отключили ViewState где-то?
У меня только что был коллега, который столкнулся с той же проблемой; его вызвал атрибут
onrowcommand=, не установленный в элементеasp:GridView. Это должно быть установлено на имя обработчика, который будет обрабатывать событие.... просто на случай, если у кого-то есть такая же проблема!
Поместите
grid.Databind()внутрьif (!IsPostBack)protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { grid.DataBind(); } }
Если ваш код такой:
protected void Page_Load(object sender, EventArgs e) { BindGrid(dgv); if (!IsPostBack) { } }Поместить в BindGrid () внутри строки isposback {}
Вы также можете проверить HttpContext.Текущий.Запрос.Сформируйте["__EVENTTARGET"] и, если он заканчивается идентификатором элемента управления, повторно свяжите GridView и используйте страницу.FindControl с целью события, чтобы найти элемент управления, запустивший событие
Моей проблемой было
requiredfieldvalidatorРешение для этого было: я отключаю его на post back, а затем снова включаю его после команды row.
Попробовал вышеприведенные ответы и все еще не мог получить сообщение обратно. В итоге получилсяуникальный идентификатор . У меня было два
<ItemTemplate>с кнопками, которые имели одинаковые идентификаторы. (В разных видах сетки. Мой второй был в пользовательском элементе управления)Изменения
<asp:Button ID="" />Уникальный идентификатор решить обратную проблему для меня.Просто подумал, что я отправлю сообщение для любого другого, кто попробовал другие варианты без успеха.
Comments