C# 重新发布(排序)--再次强制转换无效(DataTable行总和)

C# 重新发布(排序)--再次强制转换无效(DataTable行总和),c#,system.data.datatable,C#,System.data.datatable,我能够合计每一列并添加行--使用以下代码块: 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<Da

我能够合计每一列并添加行--使用以下代码块:

   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>
DataRow totalRow=t.NewRow();
int colCount=1;
对于(int j=1;j

**为什么我不能改变这个或者使用这个块(下面)来合计行数,并插入一个包含每行总数的新列???我不知道为什么我在这个问题上会有这样的障碍——我确信它相对简单,我只是没有看到它!这让我快发疯了——我已经干了三天了——真是太可悲了


int和=0;
foreach(数据行中的数据行)
{
对于(int i=0;i


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


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


System.Data.DataTable dt=new System.Data.DataTable();
添加(“数量1”,类型(int));
添加(“数量2”,类型(int));
添加(“数量3”,类型(int));
添加(“数量4”,类型(int));
添加(“行总计”,类型(int));
DataRow dr=dt.NewRow();
dr[0]=100;
dr[1]=200;
dr[2]=300;
dr[3]=400;
dr[4]=0;
dt.Rows.Add(dr);
整数和=0;
对于(int i=0;i
看起来可能不是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();
var sum=(从dt.Columns.AsEnumerable()中的列开始。跳过(1)
从dt.Rows.AsEnumerable()中的行跳过(1)
其中column.ColumnName!=“客户端”
选择(长)行[列].Sum();
请用滚筒---

谢谢你们的评论和建议,他们确实帮助我了解了幕后到底发生了什么。
System.Data.DataTable dt=ds.Tables[0];
添加(“testrow”,typeof(int));
DataRow dr=dt.NewRow();
整数和=0;
对于(int i=1;i
能否发布堆栈跟踪?System.InvalidCastException未经处理HResult=-2147467262消息=指定的强制转换无效。Source=System.Data.DataSetExtensions StackTrace:at System.Data.DataRowExtensions.unbox`1.ValueField(对象值)at System.Data.DataRowExtensions.Field[T](DataRow,Int32 columnIndex)
T.Columns.Cast().Skip(1)您必须首先将其作为对象抓取。我很早就试着这么做了——我想我之前试的时候没有按照正确的顺序进行步骤。
        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;
                }
            }
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;
        }