Событие 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.

552   8  

8 ответов:

Вы должны Не привязывать свою сетку к обратным ссылкам в Page_Load, только когда что-то изменилось,что заставляет сетку перезагружать данные(например, сортировка, подкачка) и только в соответствующих обработчиках событий.

Еще одна возможная причина: вы отключили ViewState где-то?

У меня только что был коллега, который столкнулся с той же проблемой; его вызвал атрибут onrowcommand=, не установленный в элементе asp:GridView. Это должно быть установлено на имя обработчика, который будет обрабатывать событие.

... просто на случай, если у кого-то есть такая же проблема!

Используйте CausesValidation="false" в теге button. Это может решить проблему.

Поместите 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

    Ничего не найдено.