Преобразование asp:ButtonField в asp:TemplateField в элементе управления GridView

В настоящее время у меня есть gridview с asp:ButtonField в качестве одного из столбцов. Обработчик событий для команды извлекает идентификатор строки gridview из аргумента команды и использует его для выполнения некоторой логики. Теперь мне нужно переключиться на использование поля шаблона для этого столбца и я хочу сделать что-то вроде этого:

<asp:TemplateField HeaderText="Action">
    <ItemStyle HorizontalAlign="Center" />
        <ItemTemplate>
            <asp:LinkButton CommandName="myaction" CommandArgument="<%#Eval("id")%>" Text="do action" runat="server"/>
        </ItemTemplate>
 </asp:TemplateField>

Моя проблема связана с атрибутом CommandArgument — я не знаю, как сделать его идентификатором строки из GridView. Eval("id") не работает - кто-нибудь знает, как называется свойство идентификатора строки? Или лучший способ сделать это?


person sgibbons    schedule 03.12.2008    source источник


Ответы (1)


Ознакомьтесь с этим документом на веб-сайте Microsoft.

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowcommand.aspx

Вам не нужно привязывать идентификатор строки. Аргумент команды используется для аргументов события, а не для аргументов строки... если это имеет смысл.

Я думаю, что я пытаюсь сказать, что идентификатор строки является неявным. Когда вы обращаетесь к событию CommandArgs, это должно быть что-то конкретное для события, которое вы пытаетесь вызвать.

т. е. если вы хотите просмотреть страницу, у вас будет «следующая», «предыдущая», «первая», «последняя» или номер страницы в CommandArgument.

Скажем, у вас есть кнопка «Удалить» или ImageButton. Пользователь нажимает на нее; событие удаления принимается при обратной передаче и передается из строки в сетку, при этом весь объект строки передается в качестве аргумента. Затем сетка удаляет строку, как если бы это был один элемент управления в коллекции элементов управления, потому что таблица представляет собой набор строк таблицы.

person BenAlabaster    schedule 03.12.2008