Получить значения 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 
  • Как проверить, нажата ли клавиша во время события click с помощью jQuery?
  • Остановить распространение событий мыши в угловом
  • jQuery одно и то же событие click для нескольких элементов
  • Android: Почему длинный клик также вызывает обычный щелчок?
  • Отслеживание положения прокрутки и уведомление об этом других компонентах
  • Обработка событий Delphi, создание собственного события
  • Глобальные события в угловых
  • Как установить значение входного файла при выпадающем файле на странице?
  • Пользовательские события в jQuery?
  • Как можно удалить все обработчики событий события «Click» кнопки «Button»?
  • В обработчике событий C # почему параметр «отправитель» должен быть объектом?
  • Interesting Posts

    Где я могу найти журналы IIS?

    Использование учетной записи Google для входа в приложение для Android

    LINQ to Entities поддерживает только листинг EDM примитивных или перечисляемых типов с интерфейсом IEntity

    Легкий способ найти неинициализированные переменные-члены

    Компьютер включается, когда что-то еще включено в комнате

    База данных не копирует из активов

    Зачем использовать #include_next в проекте?

    Как настроить Spring для создания JPA (Hibernate) и JDBC (JdbcTemplate или MyBatis) совместно использовать одну и ту же транзакцию

    Имена файлов в OS X, появляющиеся с вопросительными знаками

    Создание кнопки JavaFX 2 с использованием только FXML – Как добавить изображение к кнопке?

    Шифрование строки подключения в web.config

    Ввод текста заголовка WPF datagrid

    Каковы признаки инициализации крестов?

    Приложения CORS и phonegap

    Как установить GCC по частям с GMP, MPFR, MPC, ELF, без разделяемых библиотек?

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