2009-11-19 6 views
9

'dan veri içermeyen tüm sütunları kaldırın Belirli bir sütunun tüm öğeleri boşsa, bu sütunu DataTable'dan kaldırmak istiyorum. Bu işlemi DataTable'daki tüm sütunlarda yapmanın en zarif yolu nedir?VeriTable

cevap

32

Böyle Compute yöntemi kullanabilirsiniz: Alternatif

if (table.Compute("COUNT(ColumnName)", "ColumnName <> NULL") == 0) 
    table.Columns.Remove("ColumnName"); 

, LINQ kullanabilirsiniz:

if (table.AsEnumerable().All(dr => dr.IsNull("ColumnName"))) 
    table.Columns.Remove("ColumnName"); 

EDIT: Tamamen soruyu cevaplamak için:

foreach(var column in table.Columns.Cast<DataColumn>().ToArray()) { 
    if (table.AsEnumerable().All(dr => dr.IsNull(column))) 
     table.Columns.Remove(column); 
} 

Döngü koleksiyonu değiştireceğinden, ToArray numaralı telefonu aramanız gerekir.

+0

Güzel. Tüm sütun adlarını kontrol etmek için kodu ayarlayın ve yeşil onay işaretini alırsınız. – Larsenal

+2

PlzSendTheCodes'i duyuyor muyum? –

+0

Belki ;-). Onu zaten kendim uygulamıştım. Sadece ilk soruya tamamen cevap vermediğinden doğru olarak işaretlemek istemiyorum. – Larsenal

0
Function RemoveEmptyColumns(Datatable As DataTable) As Boolean 
    Dim mynetable As DataTable = Datatable.Copy 
    Dim counter As Integer = mynetable.Rows.Count 
    Dim col As DataColumn 
    For Each col In mynetable.Columns 
     Dim dr() As DataRow = mynetable.Select(col.ColumnName + " is Null ") 
     If dr.Length = counter Then 
      Datatable.Columns.Remove(col.ColumnName) 
      Datatable.AcceptChanges() 
     End If 
    return true 
end function 
0
public static void RemoveNullColumnFromDataTable(DataTable dt) 
{ 
    for (int i = dt.Rows.Count - 1; i >= 0; i--) 
    { 
     if (dt.Rows[i][1] == DBNull.Value) 
      dt.Rows[i].Delete(); 
    } 
    dt.AcceptChanges(); 
} 
+0

Şüphesiz, bu satırdaki sütun 1 DBNULL ise, satırın tamamını siler. OP'nin peşinde olduğu tam olarak değil. – Steve

0
private static void RemoveUnusedColumnsAndRows(DataTable table) 
    {    
     for (int h = 0; h < table.Rows.Count; h++) 
     { 
      if (table.Rows[h].IsNull(0) == true) 
      { 
       table.Rows[h].Delete(); 
      } 
      enter code here 
     } 
     table.AcceptChanges(); 
     foreach (var column in table.Columns.Cast<DataColumn>().ToArray()) 
     { 
      if (table.AsEnumerable().All(dr => dr.IsNull(column))) 
       table.Columns.Remove(column); 
     } 
     table.AcceptChanges();   
    } 
1

böyle datatable.you kullanımda Sen berrak tüm sütun.

datatable.Columns.Clear();