本人需要在某grid中将某一条件下的相同字段栏位进行合并,现在用的是cxgrid,不知如何进行?
如:
1 A001 2 6
2-1 A002 5 5
2-2 A002 3 5想显示如下结果: 1 A001 2 6 2-1 5
A002 10
2-2 3
如:
1 A001 2 6
2-1 A002 5 5
2-2 A002 3 5想显示如下结果: 1 A001 2 6 2-1 5
A002 10
2-2 3
调试欢乐多
在控件里面,不好处理,要处理,我这里有个笨办法供你参考,别吐口水。
1.做数据库直接查询语句,商品进销存为例子。
//这个按名称顺序排序很重要,因为你要剔除重复的名称只显示一次。
adoQuery.SQL.Text:='Select 名称,数量,单价,金额 From 销售表 Order By 名称'
比如结果是:这个结果一定要按名称排序,以便进行下一步处理。
长虹彩电 1 3000 3000
长虹彩电 2 2800 5600
长虹彩电 5 2500 12500
金立手机 1 1500 1500
金立手机 2 1400 2800
南浮电池 10 5 502。用中间临时数据集过渡装载数据,装载数据的时候,对同个字段重复的值,第二次出现在一个记录的时候,让其为 NULL
while not adoquery.eof do
var上一个用过的商品名:='';//初始化为空
while not adoquery.eof do
begin
varClientDataSet.Append;
if var上一个用过的商品名<>adoquery商品名.AsString then
varClientDataSet商品名.AsString:=adoquery商品名.AsString;//如果添加的记录商品名和上次添加的不同,就添加,否则不添加 var上一个用过的商品名:=adoquery商品名.AsString;//记录本次记录添加商品的名称
varClientDataSet数量.AsInteger:=adoquery商品名.AsInteger;
varClientDataSet单价.AsFloat:=adoquery商品名.AsFloat;
varClientDataSet金额.AsFloat:=adoquery商品名.AsFloat;
varClientDataSet.Post;
adoquery。Next;
end;3。然后把这个ClientDataSet通过DataSource连接到DBGrid上,效率低了点,起码视觉效果可以达到你的要求