Необходимо получить массив выбранных DataGridViewCheckBoxColumn
Пользователь отмечает необходимые строки. Мне нужно считать массив id отмеченных. Не отмеченные не интересуют
SqlDataAdapter da = new SqlDataAdapter("USE BD_THREAT SELECT NAME, SOURSE_OF_THREAT, OBJECT_OF_INFLUENSE FROM THREATS", cn);
DataSet ds = new DataSet();
cn.Open();
da.Fill(ds, "THREATS");
DataGridViewCheckBoxColumn checkboxcolumn = new DataGridViewCheckBoxColumn();
checkboxcolumn.HeaderText = "";
dataGridView1.Columns.Insert(dataGridView1.ColumnCount, checkboxcolumn);
dataGridView1.DataSource = ds.Tables["THREATS"];
cn.Close();
Ответы (1 шт):
Автор решения: Alexander Petrov
→ Ссылка
Не работайте напрямую с DataGridView.
Вы же используете привязку данных, вот и работайте с DataTable.
Имеется поле:
private DataTable threats;
DataSet не нужен, т. к. вы используете одну таблицу.
Загружаем данные:
threats = new DataTable();
da.Fill(threats);
Добавляем в DataTable булеву колонку:
threats.Columns.Add("Check", typeof(bool));
Делаем привязку. Булева колонка будет отображаться в гриде в виде чекбоксов.
dataGridView1.DataSource = threats;
//dataGridView1.Columns["Check"].HeaderText = "";
При желании можно изменить текст заголовка.
Теперь копируем отмеченные колонки в новый DataTable.
var selected = threats.AsEnumerable()
.Where(row => row.Field<bool?>("Check") == true);
if (selected.Any())
{
var result = selected.CopyToDataTable();
// Убираем булев столбец, если он не нужен.
result.Columns.Remove("Check");
// Как-то используем выбранные данные.
// Например, привязываем к другому гриду.
dataGridView2.DataSource = result;
}