2016-03-27 12 views
2

最後の列を除く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の定義は含まれません。

どのように達成できますか?

答えて

2

あなたがtakingのみn-1列で最後の列を除外することができます。

var columnsList = datagridview.Columns 
           .Cast<DataGridViewColumn>() 
           .Take(datagridview.Columns.Count-1) 
           .Select(c => c.Name); 
+0

ありがとうございます#har07 – ehh

1

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 }); 

しかし、もちろん、すでに答えとして、それはnは、列の数ですTake(n-1)を使用する方がはるかに簡単だ

+0

構文を与えてくれてありがとうございます。確かに、テイクは非常にエレガントです。 – ehh

1

私はここ

Enumerable.Rangeを使用する Columnsは、インデクサーを持っているので、 が最初 datagridview.Columns.Count - 1

を取る=最後の1以外のDataGridViewのすべての列名のリストを取得し、唯一IEnumerable(非ジェネリック)を実装

var names = Enumerable.Range(0, datagridview.Columns.Count - 1) 
         .Select(idx => datagridview.Columns[idx].Name); 
+0

ありがとう、非常に素晴らしい解決策。 – ehh

関連する問題