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