Исключить последний столбец DataGridView из выбора
Я пытаюсь получить список всех имен столбцов DataGridView
кроме последнего.
Следующее возвращает все столбцы:
var columnsList = datagridview.Columns
.Cast<DataGridViewColumn>()
.Select(c => c.Name);
Я пытался использовать Except
чтобы удалить последний столбец для возвращаемого значения:
var columnsList = datagridview.Columns
.Cast<DataGridViewColumn>()
.Select(c => c.Name)
.Except((datagridview.Columns.GetLastColumn(DataGridViewElementStates.Visible, DataGridViewElementStates.Visible).Name));
Я получаю сообщение об ошибке IEnumerable<string>
не содержит определения для Except
,
Как этого добиться?
3 ответа
Вы можете исключить последний столбец, взяв только n-1
столбцы:
var columnsList = datagridview.Columns
.Cast<DataGridViewColumn>()
.Take(datagridview.Columns.Count-1)
.Select(c => c.Name);
Получить список всех имен столбцов DataGridView, кроме последнего = взять первым datagridview.Columns.Count - 1
столбцы
поскольку Columns
имеет индексатор и реализует только IEnumerable
(не универсальный) я бы использовал Enumerable.Range
Вот
var names = Enumerable.Range(0, datagridview.Columns.Count - 1)
.Select(idx => datagridview.Columns[idx].Name);
Except
требует коллекции в качестве входного аргумента. Это заданная операция: set1 минус set2. Так что технически это должно быть
var lastColumn = datagridview.Columns.GetLastColumn(DataGridViewElementStates.Visible, DataGridViewElementStates.Visible).Name;
var columnsList = datagridview.Columns
.Cast<DataGridViewColumn>()
.Select(c => c.Name)
.Except(new[] { lastColumn });
Но, конечно, как уже ответили, это гораздо проще в использовании Take(n-1)
, где n
это количество столбцов.