2009-11-19 39 views

回答

32

可以使用Compute方法,像這樣:

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

或者,你可以使用LINQ:

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

編輯:要完全回答這個問題:

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

您需要呼叫ToArray,因爲循環將修改集合。

+0

不錯。調整代碼以檢查所有列名稱,並獲得綠色複選標記。 – Larsenal

+2

我聽說過PlzSendTheCodes嗎? –

+0

也許;-)。我已經自己實現了它。只是不想標記它是正確的,因爲它沒有完全回答最初的問題。 – 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

當然這會刪除整行,如果該行中的列1是DBNULL。並不完全是OP之後的事情。 – 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

你清楚這樣datatable.you使用的所有列。

datatable.Columns.Clear();