Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#从数据表中删除所有值均为零的列_C#_Asp.net - Fatal编程技术网

C#从数据表中删除所有值均为零的列

C#从数据表中删除所有值均为零的列,c#,asp.net,C#,Asp.net,我需要从datatable中删除所有行的值都为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 在本例中,应删除最后一列 如何做到这一点?DataTable dt; DataTable dt; int dataWidth = 5; //use a loop or something to determine how many columns w

我需要从datatable中删除所有行的值都为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
在本例中,应删除最后一列

如何做到这一点?

DataTable dt;
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);
}
int dataWidth=5//使用循环或其他方法确定有多少列将包含数据 bool[]emptyCols=新bool[datawidth]//将所有值初始化为true foreach(dt中的r行) { 对于(int i=0;i
我还没有测试过,但我用excel列做过类似的测试。基本逻辑是这样的,我不知道我所有的增量或行编号是否完全正确。我相信我使用的大多数功能也可用。

首先:

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();
//创建表
DataTable=新的DataTable();
表.列.添加(“口径”,类型(int));
表.列.添加(“桶”,类型(int));
表.Rows.Add(762,0);
表.Rows.Add(556,0);
表.行.添加(900,0);
//删除零值列
List columnsToDelete=新列表();
foreach(table.Columns中的DataColumn列)
if(IsColumnZero(表、列、列名称))
columnsToDelete.Add(column.ColumnName);
foreach(columnsToDelete中的字符串ctd)表.Columns.Remove(ctd);
//显示结果
GridView1.DataSource=表格;
GridView1.DataBind();

更具体地回答你的问题“或者换句话说,总和为0”。这不仅仅是“其他词”,这是完全不同的事情(想想一列有一些正值和一些负值)。@dasblinkenlight它们不应该是负值。但让我们忽略其他一些词:通常不会从数据库表中删除列:这是一个模式操作,而不是数据操作;您的程序很少需要这样做。另一方面,删除所有列都设置为零的行要常见得多。@dasblinkenlight它的C#datatable,而不是database