Как получить значение ячейки DataGridView по имени столбца? - программирование
Подтвердить что ты не робот

Как получить значение ячейки DataGridView по имени столбца?

У меня есть приложение WinForms с DataGridView, которое DataSource является DataTable (заполнено из SQL Server), которое имеет столбец xxx. Следующий код вызывает исключение

Исключение ArgumentException было необработанным. Столбец с именем xxx не найден.

foreach (DataGridViewRow row in Rows)
{
    if (object.Equals(row.Cells["xxx"].Value, 123))
}

Можно ли получить значения ячейки по имени столбца?

4b9b3361

Ответ 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