问题如题:
要求结果如下:第四列是要将计算结果写入的列,计算要求为:
先找到所有第一列相同的列,然后分别将这些相同的第二,第三列分别求和,然后再将第三列的和减去第二列的和.将结果写在第四列中的所有第一列相同的行中.列一 列二 列三 列四
A1 10 10 -5
A1 10 5 -5
A1 5 5 -5
B1 10 20 10
B1 5 5 10如何实现,谢谢各位了,我想了半天,抽了十根烟,就是没想出来,唉.
要求结果如下:第四列是要将计算结果写入的列,计算要求为:
先找到所有第一列相同的列,然后分别将这些相同的第二,第三列分别求和,然后再将第三列的和减去第二列的和.将结果写在第四列中的所有第一列相同的行中.列一 列二 列三 列四
A1 10 10 -5
A1 10 5 -5
A1 5 5 -5
B1 10 20 10
B1 5 5 10如何实现,谢谢各位了,我想了半天,抽了十根烟,就是没想出来,唉.
几个Foreach
select test1.f1,f2,f3,temp.f4 from test1
left join
(select f1,SUM(f3)-SUM(f2) f4 from test1
group by f1) temp on temp.f1=test1.f1
再绑定到datagridview
insert into @test
select 'A1',10,10 union all
select 'A1',10,5 union all
select 'A1',5,5 union all
select 'B1',10,20 union all
select 'B1',5,5 select a.*,b.L4 from @test a join
(select L1,sum(L3)-Sum(L2) as L4 from @test group by L1) b on a.L1=b.L1
L1 L2 L3
-------------------------------------------------- ----------- -----------
A1 10 10
A1 10 5
A1 5 5
B1 10 20
B1 5 5(5 行受影响)L1 L2 L3 L4
-------------------------------------------------- ----------- ----------- -----------
A1 10 10 -5
A1 10 5 -5
A1 5 5 -5
B1 10 20 10
B1 5 5 10(5 行受影响)
不晓得DataTable里面可不可以用上sql语句,如果可以就好办了。
A1 10 10 -5
A1 10 5 -5
A1 5 5 -5
-------------------------------
25 20 -5这个-5就是这么来的.
原来数据表为datagridview1 ,新的空数据为datagridview2
把表datagridview1数据有条件逐行添加到datagridview2
逐行添加思路如下
遍历表datagridview1,如果datagridview2存在A1则第三列相加,第二列也相加
如果datagridview2不存在B1则添加B1,再第三列相加,第二列相加
结果datagridview2就是一个类似A1 B1第二,三列汇总好的新表,再第三列减第二列就是第四列
datagridview2就是最终楼主想要的表格,而且对datagridview1原始数据不作任何修改
datagridview1,datagridview2功能区分明显易于以后数据变更处理
DataTable MyDT = new DataTable();
MyDT.Columns.Add("列1");
MyDT.Columns.Add("列2");
MyDT.Columns.Add("列3");
MyDT.Columns.Add("列4");
DataRow row1 = MyDT.NewRow();
row1["列1"] = "A1";
row1["列2"] = 10;
row1["列3"] = 10;
row1["列4"] = "";
MyDT.Rows.Add(row1);
DataRow row2 = MyDT.NewRow();
row2["列1"] = "A1";
row2["列2"] = 10;
row2["列3"] = 5;
row2["列4"] = "";
MyDT.Rows.Add(row2);
DataRow row3 = MyDT.NewRow();
row3["列1"] = "A1";
row3["列2"] = 5;
row3["列3"] = 5;
row3["列4"] = "";
MyDT.Rows.Add(row3);
DataRow row4 = MyDT.NewRow();
row4["列1"] = "B1";
row4["列2"] = 10;
row4["列3"] = 20;
row4["列4"] = "";
MyDT.Rows.Add(row4);
DataRow row5 = MyDT.NewRow();
row5["列1"] = "B1";
row5["列2"] = 5;
row5["列3"] = 5;
row5["列4"] = "";
MyDT.Rows.Add(row5);
Hashtable HT = new Hashtable();
for (int i = 0; i < MyDT.Rows.Count; i++)
{
if (HT.ContainsKey(MyDT.Rows[i][0].ToString()))
{
HT[MyDT.Rows[i][0].ToString()] = Convert.ToInt32(HT[MyDT.Rows[i][0].ToString()])+Convert.ToInt32(MyDT.Rows[i][2]) - Convert.ToInt32(MyDT.Rows[i][1]);
}
else
{
HT.Add(MyDT.Rows[i][0].ToString(), Convert.ToInt32(MyDT.Rows[i][2]) - Convert.ToInt32(MyDT.Rows[i][1]));
}
}
for (int i = 0; i < MyDT.Rows.Count; i++)
{
MyDT.Rows[i][3] = HT[MyDT.Rows[i][0].ToString()];
}
dataGridView1.DataSource = MyDT;
用哈希表,不错,不过我也想到信方法,用LinSql to object.
谢谢楼上的.学习了.