Событие 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.
Ответы
Ответ 1
Вы должны не связывать свою сетку с postbacks в Page_Load, только когда что-то изменилось, что заставляет Grid перезагружать данные (например, сортировку, пейджинг) и только в соответствующих обработчиках событий.
Другая возможная причина: отключили ли вы ViewState где-нибудь?
Ответ 2
У меня только был коллега, который столкнулся с той же проблемой; его вызвал атрибут onrowcommand=
, который не устанавливается в элементе asp:GridView
. Это должно быть указано на имя обработчика, который будет обрабатывать событие.
... на всякий случай у кого-то такая же проблема!
Ответ 3
Используйте тег CausesValidation="false"
в теге. Это может решить проблему.
Ответ 4
Поместите grid.Databind()
внутрь if (!IsPostBack)
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
grid.DataBind();
}
}
Ответ 5
Если ваш код такой:
protected void Page_Load(object sender, EventArgs e)
{
BindGrid(dgv);
if (!IsPostBack)
{
}
}
Поместите BindGrid()
внутри блока !isPostBack
Ответ 6
Вы также можете проверить HttpContext.Current.Request.Form [ "__ EVENTTARGET" ], и если он заканчивается идентификатором элемента управления, переустановите GridView и используйте Page.FindControl с целевым объектом, чтобы найти элемент управления, который запускал событие
Ответ 7
Моя проблема была requiredfieldvalidator
Решение было следующим: я отключил его при отправке назад, а затем снова включил его после команды row.
Ответ 8
Пробовал вышеупомянутые ответы и до сих пор не смог получить сообщение назад. Завершена проблема Уникальный идентификатор. У меня было два <ItemTemplate>
с кнопками с одинаковыми идентификаторами. (В разных сетках. Моя вторая была в User Control)
Изменение <asp:Button ID="" />
на уникальный идентификатор решило проблему с обратной записью для меня.
Просто подумал, что я отправлю кому-нибудь еще, кто попробовал другие варианты, не повезло.