是呀,很简单的嘛比如说有两列需要计算的,列名分别为a,b
int aSum = 0;
int bSum = 0;
for(int i=0;i<DataSet.Table[0].Rows.Count;i++)
{
aSum += Int32.Parse(DataSet.Table[0].Rows[i]["a"].ToString());
bSum += Int32.Parse(DataSet.Table[0].Rows[i]["b"].ToString());
}
循环结束后,aSum,bSum就分别是你要的列a和列b的的总和
如果你要用datagrid显示这些,就可以这样作():
for(int j=0;j<DataSet.Table[0].Rows.Count+1;j++)
{
if(j == 0)
{
datagrid.Items[j].Cells[a所在列的列数].Text = aSum.ToString();
datagrid.Items[j].Cells[b所在列的列数].Text = bSum.ToString(); }
else
{
datagrid.Items[j].Cells[a所在列的列数].Text = DataSet.Table[0].Rows[j-1]["a"].ToString();
datagrid.Items[j].Cells[b所在列的列数].Text = DataSet.Table[0].Rows[j-1]["b"].ToString();
}
}
这样基本上就是按照你说的方式显示在datagrid上了。
int aSum = 0;
int bSum = 0;
for(int i=0;i<DataSet.Table[0].Rows.Count;i++)
{
aSum += Int32.Parse(DataSet.Table[0].Rows[i]["a"].ToString());
bSum += Int32.Parse(DataSet.Table[0].Rows[i]["b"].ToString());
}
循环结束后,aSum,bSum就分别是你要的列a和列b的的总和
如果你要用datagrid显示这些,就可以这样作():
for(int j=0;j<DataSet.Table[0].Rows.Count+1;j++)
{
if(j == 0)
{
datagrid.Items[j].Cells[a所在列的列数].Text = aSum.ToString();
datagrid.Items[j].Cells[b所在列的列数].Text = bSum.ToString(); }
else
{
datagrid.Items[j].Cells[a所在列的列数].Text = DataSet.Table[0].Rows[j-1]["a"].ToString();
datagrid.Items[j].Cells[b所在列的列数].Text = DataSet.Table[0].Rows[j-1]["b"].ToString();
}
}
这样基本上就是按照你说的方式显示在datagrid上了。
int aSum = 0;
int bSum = 0;
这种记录方法也不是我需要的,因为表的字段不同,我是想用一个程序,完成多个动态表的汇总工作
但实际上我每次只生成一个表,包括相继记录(多条),汇总记录(一条,是有前面的多条记录按列汇总生成),但我想用一个程序写出不同表结构的汇总操作,不知道大家明白了没有这个程序不是想象的那么简单。
重新生存一个新表,那就新建一个表,或者clone一个,
原来的数据集加进来,然后计算的结果跟在在后面
insert into table
(a,b,c,d)
select sum(a) as a, sum(b) as b, sum(c) as c
from table
可能是我说的有点歧义,难点不是在于怎么累加,这很容易
难的是每次用DataSet.Tables[0]这个虚拟表的时候,表中的列都在变化,可能我用第一个表的时候是10列,那我就要 求这10列的合,然后生成一条新的汇总记录,然后把这条汇总记录做为DataSet.Tables[0]的第一条记录。到第二个表可能有19列,也是实现上面的统计操作我不可能按列名来统计,只能按第一列,第二列来统计出汇总结果,然后生成新的记录,我不能用具体的列名,这是很困难的事情,不是我懒,这应该是个很抽象的程序,大家都想具体了
只需要在水晶报表设计那里调用它的一些公式就搞定了嘛。
(a,b,c,d)
select sum(a) as a, sum(b) as b, sum(c) as c
from table
这个sql具体怎么写啊?
既然是水晶,为什么不用计算字段?
如果是增加一行,为什么要insert,不用
select a,b,c from tablename union select sum(a),sum(b),sum(c) from table
不晓得是不是我想多了:)