ASP.NET Gridview Выбранный индекс изменен не стреляя - PullRequest
0 голосов
/ 14 декабря 2018

Об этом спрашивали довольно много раз, но все же.

В GridView определяется событие OnSelectedIndexChanged.Я ожидаю, что если я нажму на строку в gridview, событие будет запущено.Мне удалось сделать то же самое с кнопками изображения, но я хочу, чтобы вся строка была интерактивной.

<asp:GridView runat="server" ID="gameGrid" PageSize="20" PagerSettings-Mode="NextPreviousFirstLast"
    OnRowDataBound="GameGrid_RowDataBound" OnPageIndexChanging="GameGrid_PageIndexChanging"
    AutoGenerateColumns="false" CssClass="table table-hover table-striped" AllowPaging="True"
    AllowSorting="True" ShowHeaderWhenEmpty="True" OnSelectedIndexChanged="gameGrid_SelectedIndexChanged">
    <Columns>
        <asp:BoundField HeaderText="Game Id" DataField="ID_Game" SortExpression="ID_Game" />
        <asp:BoundField HeaderText="Player" DataField="Email" SortExpression="Email" />
        <asp:BoundField HeaderText="Finshed" SortExpression="Finished" />
        <asp:BoundField HeaderText="Started At" SortExpression="CreateDate" />
        <asp:BoundField HeaderText="Last Updated At" SortExpression="LastUpdate" />
    </Columns>
</asp:GridView>

Я предполагал, что если я определю EventHandler в CodeBehind, он будет запущен.

protected void gameGrid_SelectedIndexChanged(object sender, EventArgs e)
{
    int i = 0;
}

Почему это событие не запускается?

Я бы хотел перенаправить пользователя на другую страницу с параметром ID в URL.Должен ли я сделать что-то другое?

1 Ответ

0 голосов
/ 14 декабря 2018

Сначала установите для свойства AutoGenerateSelectButton значение true в GridView.Это сгенерирует LinkButton.Теперь в событии RowDataBound сделайте следующее.

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    //check if the row is a datarow
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        //find the select button in the row (in this case the first control in the first cell)
        LinkButton lb = e.Row.Cells[0].Controls[0] as LinkButton;

        //hide the button, but it still needs to be on the page
        lb.Attributes.Add("style", "display:none");

        //add the click event to the gridview row
        e.Row.Attributes.Add("onclick", Page.ClientScript.GetPostBackClientHyperlink((GridView)sender, "Select$" + e.Row.RowIndex));
    }
}

Вы можете добавить событие OnClick в строку, не показывая SelectButton, но затем отключите EnableEventValidation, как показано здесь Как создать строку сетки в виде кликабеля?

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