-2

すべての行の値が 0 であるデータテーブルから列を削除する必要があります。つまり、sum が 0 の場合です。

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

この例では、最後の列を削除する必要があります。

これを行う方法?

4

2 に答える 2

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 列で同様のことを行いました。基本的なロジックはありますが、すべてのインクリメントまたは行番号が正確に正しいかどうかはわかりません。私が使っていたほとんどの機能も利用できると思います。

于 2012-08-03T21:46:15.760 に答える
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();
于 2012-08-03T22:29:59.587 に答える