Как получить значение ячейки DataGridView по имени столбца?
У меня есть приложение WinForms с DataGridView
, которое DataSource является DataTable (заполнено из SQL Server), которое имеет столбец xxx
. Следующий код вызывает исключение
Исключение ArgumentException было необработанным. Столбец с именем xxx не найден.
foreach (DataGridViewRow row in Rows)
{
if (object.Equals(row.Cells["xxx"].Value, 123))
}
Можно ли получить значения ячейки по имени столбца?
Ответы
Ответ 1
DataGridViewColumn
объекты имеют Name
(показано только в конструкторе форм) и HeaderText
(показано в GUI в верхней части столбца). Указатель в вашем примере использует свойство столбца Name
, поэтому, поскольку вы говорите, что не работает, я предполагаю, что вы действительно пытаетесь использовать заголовок столбца.
В этом нет ничего встроенного, который делает то, что вы хотите, но его достаточно легко добавить. Я бы использовал метод расширения, чтобы упростить его использование:
public static class DataGridHelper
{
public static object GetCellValueFromColumnHeader(this DataGridViewCellCollection CellCollection, string HeaderText)
{
return CellCollection.Cast<DataGridViewCell>().First(c => c.OwningColumn.HeaderText == HeaderText).Value;
}
}
И затем в вашем коде:
foreach (DataGridViewRow row in Rows)
{
if (object.Equals(row.Cells.GetCellFromColumnHeader("xxx").Value, 123))
{
// ...
}
}
Ответ 2
Да, просто удалите кавычки и добавьте .Index, т.е.
foreach (DataGridViewRow row in Rows)
{
if (object.Equals(row.Cells[xxx.Index].Value, 123))
... то есть, если ваш столбец действительно называется xxx, а не какое-то другое имя, такое как Column1 и т.д. Вы можете установить имя столбца и заголовок столбца независимо, чтобы проверить конструктор.
Ответ 3
Я нашел это:
- Щелкните правой кнопкой мыши на datagridview.
- Выберите из всплывающего меню "Редактировать столбцы".
- Выберите нужную колонку.
Design/(Name) - это то, что вы искали.
Пример:
if(dataGridViewProjectList.Rows[dataGridViewProjectList.CurrentCell.RowIndex].Cells["dateendDataGridViewTextBoxColumn"].Value.ToString().Length == 0)
Ответ 4
Посредством этого вы сможете получить доступ к ячейке в столбце "xxx" для текущей выбранной строки.
dataGridView1.SelectedRows[0].Cells["xxx"]
Ответ 5
если столбец сетки находится в режиме разработки.
то имя столбца было gridView ~~~ Название элемента управления столбцом
Пример:
DataGridViewTextBoxColumn idDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
idDataGridViewTextBoxColumn.Name = "idDataGridViewTextBoxColumn";
тогда вы можете получить доступ к этому, вы хотите.
row.Cells["idDataGridViewTextBoxColumn"].Value