DataGridView записывает все значения из столбца в список

Вопрос: Я хотел бы написать все значения из столбца 2 в список: List list = new List(); foreach (var item in dataGridView1.Rows) { list.Add(item.Cells[1].Value.ToString); } Однако это возвращает ошибку. Лучший ответ: Для ошибки: "obejct" не содержит определения для "ячеек" и никакого метода расширения "Ячейки", принимающие первый аргумент типа "объект", могут быть найдены (вам не хватает

Вопрос:

Я хотел бы написать все значения из столбца 2 в список:

List<string> list = new List<string>(); foreach (var item in dataGridView1.Rows) { list.Add(item.Cells[1].Value.ToString); }

Однако это возвращает ошибку.

Лучший ответ:

Для ошибки:

“obejct” не содержит определения для “ячеек” и никакого метода расширения “Ячейки”, принимающие первый аргумент типа “объект”, могут быть найдены (вам не хватает директивы using или ссылки на сборку?).

Вам нужно изменить свой цикл foreach а вместо var указать DataGridViewRow

foreach (DataGridViewRow item in dataGridView1.Rows) { list.Add(item.Cells[1].Value.ToString()); }

Также вам нужно () для ToString

Если вы хотите использовать LINQ, вы можете сделать это в одном заявлении, например:

List<string> list = dataGridView1.Rows .OfType<DataGridViewRow>() .Select(r => r.Cells[1].Value.ToString()) .ToList();

РЕДАКТИРОВАТЬ:

Вышеизложенное может привести к исключению Null Reference, если значение Cell[1] для любой строки равно null вы можете добавить проверку перед добавлением, которая будет проверять наличие ячейки и имеет ли она значение или нет. как:

List<string> list = new List<string>(); foreach (DataGridViewRow item in dataGridView1.Rows) { if (item.Cells.Count >= 2 && //atleast two columns item.Cells[1].Value != null) //value is not null { list.Add(item.Cells[1].Value.ToString()); } }

Вышеупомянутая проверка спасет вас от вызова ToString на нулевом объекте, и вы не получите исключение.

Ответ №1

Для учета исключений Null с использованием LINQ:

List<string> list = dataGridView1.Rows .OfType<DataGridViewRow>() .Where(x => x.Cells[1].Value != null) .Select(x => x.Cells[1].Value.ToString()) .ToList(); Ответ №2

Ошибка, которую вы получаете, происходит потому, что Rows не автоматически добавляются в DataGridViewRow при использовании var. Правильный код:

List<string> list = new List<string>(); foreach (DataGridViewRow row in dataGridView1.Rows) { list.Add(row .Cells[1].Value.ToString()); }

Оцените статью
Добавить комментарий