2012-08-03 100 views
-2

我需要從數據表中刪除所有行的值爲0的列。或者換句話說,當總和爲0。C#從所有值爲零的數據表中刪除列

1 2 5 99.9 442.25 221 0 
1 2 77.7 889 898  55 0 
9 0 66 42 55  0 0 

在這個例子中,最後一列應被刪除。

如何做到這一點?

+0

更具體與您的問題 – MethodMan 2012-08-03 21:20:25

+1

「或者換句話說,當總和爲0。」這不僅僅是「其他的詞」,這是完全不同的事情(想想一個有一些正面價值觀和一些負面價值觀的專欄)。 – dasblinkenlight 2012-08-03 21:21:11

+0

@dasblinkenlight他們不應該是負面的。但讓我們忽略其他的話。 – 2012-08-03 21:22:32

回答

1
DataTable dt; 
int dataWidth = 5; //use a loop or something to determine how many columns will have data 
bool[] emptyCols = new bool[datawidth]; //initialize all values to true 
foreach(Row r in dt) 
{ 
    for(int i = 0; i < dataWidth; i++) 
    { 
     if(r[i].Contents != 0)) 
      emptyCols[i] = false; 
    } 
} 

for(int i = 0; i < emptyCols.Length; i++) 
{ 
    if(emptyCols[i]) 
     dt.Columns.RemoveAt(i); 
} 

我還沒有測試過,但我做了與excel列類似的東西。基本邏輯在那裏,我不知道我的所有增量或行編號是否完全正確。我相信我使用的大部分功能都可以使用。

1

第一:

protected Boolean IsColumnZero(DataTable dt, string columnName) 
{ 
    foreach (DataRow row in dt.Rows) 
     if ((int)row[columnName] != 0) return false;   
    return true; 
} 

,然後你可以:

//create table 
    DataTable table = new DataTable(); 
    table.Columns.Add("caliber", typeof(int)); 
    table.Columns.Add("barrel", typeof(int)); 

    table.Rows.Add(762, 0); 
    table.Rows.Add(556, 0); 
    table.Rows.Add(900, 0); 

    //delete zero value columns 
    List<string> columnsToDelete = new List<string>(); 

    foreach (DataColumn column in table.Columns) 
     if (IsColumnZero(table, column.ColumnName)) 
      columnsToDelete.Add(column.ColumnName); 

    foreach (string ctd in columnsToDelete) table.Columns.Remove(ctd); 

    //show results 
    GridView1.DataSource = table; 
    GridView1.DataBind();