Repost (sort of) -- Invalid Cast AGAIN (DataTable Row Summat

本文关键字:AGAIN DataTable Summat Cast Row sort of Repost Invalid | 更新日期: 2023-09-27 17:49:42

我可以计算每一列的总和并添加行——使用这段代码:

   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>


**为什么O为什么我不能改变这个或使用这个块(下面)来总计行,并插入一个新的列与每行的总数?我不知道为什么我在这个问题上有这样的障碍——我相信这是相对简单的,我只是没有看到它!这简直要把我逼疯了——我已经在这上面呆了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;
    }



错误仍然是"指定的cast in not valid"——数据表来自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;
                }
            }

Repost (sort of) -- Invalid Cast AGAIN (DataTable Row Summat

它似乎不是整型,而是一个长型(或字节),你可以将一个长型强制转换为整型,但你不能将一个长型解框为整型,而问题代码试图这样做。

如果是这种情况,你可以这样写

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();

请奏响鼓点——

感谢大家的评论和建议,他们确实帮助我了解了幕后到底发生了什么。

    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;
        }