Доступ к закрытым членам объекта GridViewCommandEventArgs - PullRequest
0 голосов
/ 07 января 2009

У меня есть gridview на моей странице aspx, который настраивает событие OnRowCommand, используя серию объектов ASP.NET LinkButton для обработки логики с помощью свойства CommandName. Мне нужно получить доступ к GridViewRow.RowIndex, чтобы извлечь значения из выбранной строки и заметить, что это непубличные члены объекта GridViewCommandEventArgs при отладке приложения

Есть ли способ получить доступ к этому свойству, есть ли лучшая реализация?

Вот мой исходный код:

Страница aspx:

<asp:GridView ID="MyGridView" runat="server" OnRowCommand="MyGirdView_OnRowCommand">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:LinkButton 
                 id="MyLinkButton" 
                 runat="server" 
                 CommandName="MyCommand" 
                />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView> 

код позади

protected void MyGirdView_OnRowCommand(object sender, GridViewCommandEventArgs e)
{
    //need to access row index here....
}

ОБНОВЛЕНИЕ:
@brendan - я получил следующую ошибку компиляции в следующей строке кода:

"Невозможно преобразовать тип 'System.Web.UI.WebControls.GridViewCommandEventArgs' в 'System.Web.UI.WebControls.LinkButton' "

LinkButton lb = (LinkButton) ((GridViewCommandEventArgs)e.CommandSource);

Я немного изменил код, и сработало следующее решение:

LinkButton lb = e.CommandSource as LinkButton;
GridViewRow gvr = lb.Parent.Parent as GridViewRow;
int gvr = gvr.RowIndex;

1 Ответ

1 голос
/ 07 января 2009

Не самая чистая вещь в мире, но так я делал это в прошлом. Обычно я делаю все это одной строкой, но здесь я разбиваю ее так, чтобы было понятнее.

LinkButton lb = (LinkButton) ((GridViewCommandEventArgs)e.CommandSource);
GridViewRow gr = (GridViewRow) lb.Parent.Parent;
var id = gr.RowIndex;

По сути, вы получаете свою кнопку и перемещаетесь вверх по цепочке от кнопки к ячейке, от ячейки к строке.

Вот версия с одной строкой:

   var id = ((GridViewRow)((LinkButton)((GridViewCommandEventArgs)e).CommandSource).Parent.Parent).RowIndex;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...