Как получить значение ячейки по имени столбца не по индексу в GridView в asp.net

У меня есть gridview в asp.net, и теперь я хочу значение ячейки по имени столбца, но не по индексу ячейки.

Как это возможно, путем извлечения значения ячейки по имени столбца ячейки

GridView не действует как имена столбцов, так как это свойство datasource знать эти вещи.

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

 int GetColumnIndexByName(GridViewRow row, string columnName) { int columnIndex = 0; foreach (DataControlFieldCell cell in row.Cells) { if (cell.ContainingField is BoundField) if (((BoundField)cell.ContainingField).DataField.Equals(columnName)) break; columnIndex++; // keep adding 1 while we don't have the correct name } return columnIndex; } 

помните, что приведенный выше код будет использовать BoundField … затем используйте его как:

 protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { int index = GetColumnIndexByName(e.Row, "myDataField"); string columnValue = e.Row.Cells[index].Text; } } 

Я настоятельно рекомендую вам использовать TemplateField чтобы иметь свои собственные элементы управления, тогда легче захватить такие элементы управления, как:

          

а затем использовать

 string columnValue = ((Label)e.Row.FindControl("lblName")).Text; 

Хотя его долгое время, но этот относительно небольшой fragment кода кажется легким для чтения и получения:

 protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) { int index; string cellContent; foreach (TableCell tc in ((GridView)sender).HeaderRow.Cells) { if( tc.Text.Equals("yourColumnName") ) { index = ((GridView)sender).HeaderRow.Cells.GetCellIndex(tc); cellContent = ((GridView)sender).SelectedRow.Cells[index].Text; break; } } } 

Вы можете использовать DataRowView для получения индекса столбца.

  void OnRequestsGridRowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { var data = e.Row.DataItem as DataRowView; // replace request name with a link if (data.DataView.Table.Columns["Request Name"] != null) { // get the request name string title = data["Request Name"].ToString(); // get the column index int idx = data.Row.Table.Columns["Request Name"].Ordinal; // ... e.Row.Cells[idx].Controls.Clear(); e.Row.Cells[idx].Controls.Add(link); } } } 

Для любителей Лямбды

 protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { var boundFields = e.Row.Cells.Cast() .Select(cell => cell.ContainingField).Cast().ToList(); int idx = boundFields.IndexOf( boundFields.FirstOrDefault(f => f.DataField == "ColName")); e.Row.Cells[idx].Text = modification; } } 

Небольшая ошибка с указателем в ответе Александра: Нам нужно позаботиться о столбце «не найден»:

 int GetColumnIndexByName(GridViewRow row, string columnName) { int columnIndex = 0; int foundIndex=-1; foreach (DataControlFieldCell cell in row.Cells) { if (cell.ContainingField is BoundField) { if (((BoundField)cell.ContainingField).DataField.Equals(columnName)) { foundIndex=columnIndex; break; } } columnIndex++; // keep adding 1 while we don't have the correct name } return foundIndex; } 

а также

 protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { int index = GetColumnIndexByName(e.Row, "myDataField"); if( index>0) { string columnValue = e.Row.Cells[index].Text; } } } 

На основе чего-то, найденного в Code Project

После объявления таблицы данных на основе источника данных сетки найдите индекс столбца по имени столбца из коллекции колонок. На этом этапе используйте индекс, необходимый для получения информации от или для форматирования ячейки.

 protected void gridMyGrid_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { DataTable dt = (DataTable)((GridView)sender).DataSource; int colIndex = dt.Columns["MyColumnName"].Ordinal; e.Row.Cells[colIndex].BackColor = Color.FromName("#ffeb9c"); } } 

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

 public static int GetColumnIndexByName(GridView gridView, string columnName) { for (int i = 0; i < gridView.Columns.Count ; i++) { if (gridView.Columns[i].HeaderText.ToUpper() == columnName.ToUpper() ) { return i; } } return -1; } 
  • Как установить GridView внутри ScrollView
  • Создать миниатюру
  • Android gridview сохраняет выбранный элемент
  • Преобразование DBContext в ObjectContext для использования с GridView
  • Экспорт GridView в несколько листов Excel
  • Получить индекс Row в событии Rowcommand от Asp.net
  • Изменение цвета ячейки на разные значения - Gridview
  • Как реализовать выбор полной строки в GridView без кнопки выбора?
  • Пересечение столбцов GridLayoutManager Android Recyclerview
  • Условно скрыть CommandField или ButtonField в Gridview
  • Лучший способ сделать сортировку WPF ListView / GridView при нажатии на заголовок столбца?
  • Interesting Posts

    Как импортировать контакты из телефонной книги в нашу заявку

    Получение / установка владельца файла в C #

    Конфликт перегруженных методов с дополнительными параметрами

    Как получить доступ к определенному элементу в списке с помощью DataTemplate?

    Как запустить команду / скрипт оболочки при вводе / cd-в каталоге на Snow Leopard?

    Загрузка нового fxml в ту же сцену

    Установка позиции курсора в консольном приложении Win32

    Как вы получаете имя переменной, поскольку оно было физически напечатано в его объявлении?

    Как автоматически установить USB-накопитель, на который все пользователи могут писать?

    Могу ли я получить разрешение 2560 x1600 на моем dell 3007wfp-hc, используя соединение hdmi на моем рабочем столе dell I660s /

    CSS-анимация с задержкой для каждого дочернего элемента

    Chmod для разрешения на чтение и запись для каталога

    Как создать двудольную сеть в R с помощью igraph или tnet

    Новые текстовые файлы создаются с заглавными расширениями

    Как рассчитать разницу во времени с помощью Excel?

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