2016-03-27 18 views
2

son sütununda hariç tut Sonuncu hariç DataGridView tüm sütun adlarının listesini almaya çalışıyorum.Bir DataGridView öğesinin son sütununu

aşağıdaki döner tüm sütunlar:

var columnsList = datagridview.Columns 
      .Cast<DataGridViewColumn>() 
      .Select(c => c.Name) 
      .Except((datagridview.Columns.GetLastColumn(DataGridViewElementStates.Visible, DataGridViewElementStates.Visible).Name)); 

Ben IEnumerable<string> yaptığı bir hata alıyorum:

var columnsList = datagridview.Columns 
      .Cast<DataGridViewColumn>() 
      .Select(c => c.Name); 

ben iade değeri için son sütunu kaldırmak amacıyla Except kullanmaya çalıştı Except için bir tanım içermiyor.

Nasıl elde edebilirsiniz?

cevap

2

Sen taking sadece n-1 sütunlarla son sütunu hariç tutabilirsiniz:

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

Teşekkür ederim # har07 – ehh

1

Except giriş argüman olarak bir koleksiyon gerektirir. Ayarlanmış bir işlemdir: set1 eksi set2. Yani teknik, olması gerektiği

var lastColumn = datagridview.Columns.GetLastColumn(DataGridViewElementStates.Visible, DataGridViewElementStates.Visible).Name; 
var columnsList = datagridview.Columns 
      .Cast<DataGridViewColumn>() 
      .Select(c => c.Name) 
      .Except(new[] { lastColumn }); 

Ama tabii, zaten cevap olarak, bu n sütun sayısıdır Take(n-1), kullanımı çok daha kolay

.

+0

Sözdizimi verdiğiniz için teşekkür ederiz. Gerçekten, Take çok zariftir. – ehh

1

Burada

Enumerable.Range kullanacağı Columns indexleyici beri ilk datagridview.Columns.Count - 1 sütunları

almak = sonuncusu hariç bir DataGridView'in tüm sütunlar adının bir listesini almak ve sadece IEnumerable (genel olmayan) uygular

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

Teşekkür ederim, çok güzel bir çözüm. – ehh