Событие GridView RowCommand не запускается - PullRequest
17 голосов
/ 13 декабря 2011

У меня есть 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 ]

49 голосов
/ 13 декабря 2011

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

Другая возможная причина: Вы отключили ViewState где-нибудь?

4 голосов
/ 30 апреля 2015

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

4 голосов
/ 17 апреля 2012

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

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

3 голосов
/ 11 февраля 2016

Поместите grid.Databind() внутрь if (!IsPostBack)

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        grid.DataBind();
    }
}
2 голосов
/ 03 августа 2015

Если ваш код такой:

protected void Page_Load(object sender, EventArgs e)
{
    BindGrid(dgv);
    if (!IsPostBack)
    {

    }
}

Поместите BindGrid() в блок !isPostBack

1 голос
/ 21 ноября 2017

Попробовал вышеуказанные ответы и все еще не смог получить сообщение обратно.Закончился проблемой Уникальный идентификатор .У меня было два <ItemTemplate> с кнопками, которые имели одинаковые идентификаторы.(В разных видах сетки. Мой второй был в пользовательском элементе управления)

Изменение <asp:Button ID="" /> на уникальный идентификатор решило проблему с обратной связью для меня.

Просто подумал, что я отправлюдля любого другого, кто попробовал другие варианты без удачи.

1 голос
/ 16 февраля 2017

Моя проблема была requiredfieldvalidator

Решение этой проблемы было таково: я отключаю его при отправке назад, а затем снова включаю его после команды строки.

1 голос
/ 28 февраля 2014

Вы также можете проверить HttpContext.Current.Request.Form ["__ EVENTTARGET"] и, если он заканчивается идентификатором элемента управления, перепривязать GridView и использовать Page.FindControl с целью события, чтобы найти элемент управления, который сработал событие

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...