0

我有能力总计每一列并添加行 - 使用这段代码:

   DataRow totalRow = t.NewRow();

        int colCount = 1;
        for (int j = 1; j < t.Columns.Count; j++)
        {
            if (t.Columns[j].ColumnName == "Client")
            {
                t.Columns.Cast<DataColumn>().Skip(1);
            }
            else
            {
                int colTotal = 0;
                for (int i = 1; i < t.Rows.Count; i++)
                {

                    colTotal += Convert.ToInt32(t.Rows[i][j]);
                    totalRow[t.Columns[j].ColumnName] = colTotal;

                }
            }
            ++colCount;
        }


        t.Rows.Add(totalRow); <br>


* *为什么为什么我不能改变这个或者使用这个块(下面)来总计行并插入一个包含每行总计的新列???我不知道为什么我对此有这样的障碍-我确定它相对简单我只是没有看到它!这让我发疯——我已经在这呆了 3 天——这很难过。


  int sum = 0;
    foreach (DataRow rows in dt.Rows)
    {
        for (int i = 0; i < dt.Columns.Count; i++)
        {
            for (int j = 0; j < dt.Rows.Count; j++)
            {


                int number = Convert.ToInt32(dt.Rows[j].Field<int>(i));
                sum += number;
            }
        }

              rows["testrow"] = sum;
        }
            dataGridView1.DataSource = dt;
    }



错误仍然是“指定的强制转换无效”——数据表来自 Excel 工作表。我可以在自制的DataTable上使用它就好了。我不明白。


这段代码工作得很好,给了我一个新列中的行总和


        System.Data.DataTable dt = new System.Data.DataTable();
        dt.Columns.Add("amount1", typeof(int));
        dt.Columns.Add("amount2", typeof(int));
        dt.Columns.Add("amount3", typeof(int));
        dt.Columns.Add("amount4", typeof(int));
        dt.Columns.Add("Row Totals", typeof(int));

        DataRow dr = dt.NewRow();
        dr[0] = 100;
        dr[1] = 200;
        dr[2] = 300;
        dr[3] = 400;
        dr[4] = 0;
        dt.Rows.Add(dr);
        int sum = 0;
        for (int i = 0; i < dt.Columns.Count; i++)
        {
            for (int j = 0; j < dt.Rows.Count; j++)
            {
                //  int sum = 0;

                int number = dt.Rows[j].Field<int>(i);
                sum += number;
                }
            }
4

2 回答 2

1

它似乎不是一个 int 而是一个 long (或字节),您可以将 long 转换为 int 但您不能将 long 拆箱为相关代码尝试执行的 int 。

如果是这样的话,你可以做类似的事情

var sum = (from column in dt.Columns.AsEnumerable<DataColum>().Skip(1)
           from row in dt.Rows.AsEnumerable<DataRow>().Skip(1)
           where column.ColumnName != "Client"
           select (long)row[column]).Sum();
于 2012-12-28T17:53:11.667 回答
0

请打鼓——

感谢你们提出的意见和建议,他们确实帮助我了解了幕后究竟发生了什么。

    System.Data.DataTable dt = ds.Tables[0];
        dt.Columns.Add("testrow", typeof(int));
        DataRow dr = dt.NewRow();
        int sum = 0;
        for (int i = 1; i < dt.Columns.Count; i++)
        {
            for (int j = 1; j < dt.Rows.Count; j++)
            {

                if (j == dt.Rows.Count - 1)
                {
                    dt.Rows[i][j] = Convert.ToInt32(sum);
                    sum = 0;
            }
                else
                {
                    object number = dt.Rows[i][j];
                   sum += Convert.ToInt32(number);
                }

              }
            dataGridView1.DataSource = dt;
        }
于 2012-12-31T16:36:47.153 回答