Получение выбранной строки aspgridview при нажатии на кнопку ссылки, чтобы получить скрытое значение идентификатора - PullRequest
18 голосов
/ 09 июня 2011

Я привязываю кнопку ссылки с данными заголовка в aspgridview, а также привязываю скрытую метку, которая содержит значение идентификатора.когда пользователь нажимает на эту ссылку, я хотел бы получить доступ к значению идентификатора.Это мне нужно, потому что, если пользователь входит в систему, то только у меня появляется всплывающее окно с подробностями, в противном случае выдается предупреждение для входа в систему для получения подробной информации.

в событии lnkTitle_Click () Я пытаюсь получить доступ к выбранной строке, чтобы найти элемент управления меткой.

GridViewRow grdSelRow = GridView1.SelectedRow;
Label lblID = (Label)grdSelRow.FindControl("lblID");

Но я получаю grdSelRow как ноль.

Как получить выбранную строку при нажатии на кнопку ссылки вида сетки?

1 Ответ

24 голосов
/ 10 июня 2011

Проблема заключается в том, что при нажатии кнопки в GridView строка будет только строкой, по которой щелкнули, а не SelectedRow. Если вы хотите сделать его SelectedRow, вы должны указать CommandName="Select" в разметке кнопки.

Вот два способа выполнить ваше требование.

Подключение события onclick для LinkButton внутри ItemTemplate

Разметка

<asp:TemplateField>
    <ItemTemplate>
        <asp:LinkButton ID="LinkButton1" runat="server" 
                    Text="Click1" 
                    OnClick="LinkButton1_Click"/>
    </ItemTemplate>
</asp:TemplateField>

Код-за

protected void LinkButton1_Click(object sender, EventArgs e)
{
    GridViewRow clickedRow = ((LinkButton) sender).NamingContainer as GridViewRow;
    Label lblID = (Label)clickedRow.FindControl("lblID");
}

Использование RowCommand для отлова щелчка LinkButton.

Разметка

<asp:TemplateField>
    <ItemTemplate>
        <asp:LinkButton ID="LinkButton2" runat="server" 
                    Text="Click2" 
                    CommandName="MyCustomCommand"/>
    </ItemTemplate>
</asp:TemplateField>

Код-за

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if(e.CommandName.Equals("MyCustomCommand"))
    {
        GridViewRow clickedRow = ((LinkButton)e.CommandSource).NamingContainer as GridViewRow;
        Label lblID = (Label)clickedRow.FindControl("lblID");
    }
}
...