Получить значения DataKey в GridView RowCommand

У меня есть GridView с ассоциированным DataKey , который является идентификатором элемента. Как получить это значение внутри события RowCommand ?

Кажется, это работает, но мне не нравится приведение к LinkButton (что, если какая-то другая команда LinkButton событие?), И я не слишком уверен в бит NamingContainer .

 LinkButton lb = (LinkButton)e.CommandSource; GridViewRow gvr = (GridViewRow)lb.NamingContainer; int id = (int)grid.DataKeys[gvr.RowIndex].Value; 

Я знаю, что вместо этого я мог бы передать этот ID как CommandArgument , но я решил использовать DataKey чтобы дать мне больше гибкости.

Я также знаю, что для ID можно использовать скрытое поле, но я считаю, что это взломать, который я не хочу использовать.

Я обычно передаю RowIndex через CommandArgument и использую его для получения значения DataKey, которое я хочу.

На кнопке:

 CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>' 

На сервере событий

 int rowIndex = int.Parse(e.CommandArgument.ToString()); string val = (string)this.grid.DataKeys[rowIndex]["myKey"]; 

Мне удалось получить значение DataKeys с помощью этого кода:

В GridView я добавил:

 DataKeyNames="ID" OnRowCommand="myRowCommand" 

Затем в моей командной строке:

 protected void myRowCommand(object sender, GridViewCommandEventArgs e) { LinkButton lnkBtn = (LinkButton)e.CommandSource; // the button GridViewRow myRow = (GridViewRow)lnkBtn.Parent.Parent; // the row GridView myGrid = (GridView)sender; // the gridview string ID = myGrid.DataKeys[myRow.RowIndex].Value.ToString(); // value of the datakey switch (e.CommandName) { case "cmd1": // do something using the ID break; case "cmd2": // do something else using the ID break; } } 
 foreach (GridViewRow gvr in gvMyGridView.Rows) { string PrimaryKey = gvMyGridView.DataKeys[gvr.RowIndex].Values[0].ToString(); } 

Вы можете использовать этот код, выполняя итерацию с foreach или для любого события GridView, такого как OnRowDataBound .

Здесь вы можете ввести несколько значений для DataKeyNames , разделив их запятой. Например, DataKeyNames="ProductID,ItemID,OrderID" .

Теперь вы можете получить доступ к каждому из DataKeys его индекс, как DataKeys ниже:

 string ProductID = gvMyGridView.DataKeys[gvr.RowIndex].Values[0].ToString(); string ItemID = gvMyGridView.DataKeys[gvr.RowIndex].Values[1].ToString(); string OrderID = gvMyGridView.DataKeys[gvr.RowIndex].Values[2].ToString(); 

Вы также можете использовать Key Name вместо своего индекса, чтобы получить значения из коллекции DataKeyNames как DataKeyNames ниже:

 string ProductID = gvMyGridView.DataKeys[gvr.RowIndex].Values["ProductID"].ToString(); string ItemID = gvMyGridView.DataKeys[gvr.RowIndex].Values["ItemID"].ToString(); string OrderID = gvMyGridView.DataKeys[gvr.RowIndex].Values["OrderID"].ToString(); 

вы можете просто сделать это:

 string id = GridName.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString(); 

На кнопке:

 CommandArgument='<%# Eval("myKey")%>' 

На сервере событий

 e.CommandArgument 
  • Событие Internet Explorer и JavaScript currentTarget
  • Событие Click не работает с динамически сгенерированными элементами
  • Как я могу получить WPF EventTrigger в триггере View, если он требует диктует базовую модель Viewmodel?
  • Пользовательский прослушиватель событий в приложении для Android
  • Как подписаться на события другого classа в c #?
  • Как удалить все обработчики событий из события
  • Обнаружение событий вставки / удаления USB в Windows с использованием C ++
  • События WPF в ResourceDictionary для ControlTemplate
  • Jquery добавляет прослушиватели событий к динамически добавленным элементам
  • Как отправлять события в C #
  • Отслеживание положения прокрутки и уведомление об этом других компонентах
  • Interesting Posts

    Как добавить текст в текстовый файл на C ++?

    Изменение фонового изображения тела с эффектом затухания в jquery

    андроидальная кнопка возврата должна выйти из приложения

    Как создать строго типизированную главную страницу с использованием базового controllerа в ASP.NET MVC

    Есть ли какая-либо реализация LRU для IDRU?

    Почему я не могу расширить этот раздел в нераспределенное пространство?

    Запуск нескольких версий Firefox

    C # DataGridView Checkbox проверено событие

    Итерирование через таблицу Lua из C ++?

    Ограничить выбор внешнего ключа при выборе в встроенной форме в admin

    ElasticSearch – возвращает уникальные значения

    Android Spinner с различными макетами для «выпадающего состояния» и «закрытого состояния»?

    Каковы истинные преимущества ExpandoObject?

    Как создать пользовательские URL-адреса с помощью Struts2? Как www.twitter.com/goodyzain

    Установка абсолютного размера граней в ggplot2

    Давайте будем гением компьютера.