dbgrid有六列数据,如何1列+3列和2列+4列比较大小,大则差值放5列,小则差值放6列(160分)

  • 主题发起人 主题发起人 wininter
  • 开始时间 开始时间
W

wininter

Unregistered / Unconfirmed
GUEST, unregistred user!
dbgrid中我有六列数据,如何1列+3列和2列+4列比较大小,大则差值放5列,小则差值放6列
stringgrid的也可
 
用计算字段吧。
 
将5和6列定为计算字段,这样
var
Max1,Max2
begin
Max1 := field1+field3
Max2 := field2+field4
if Max1>Max2 then
field5 := Max1-Max2
else
field6 := Max2-Max1
end
 
DBGrid比较麻烦,需要数据集
下面是StringGrid
with StringGrid do
for J:= 0 to RowCount - 1 do begin
a:=StrtoInt(Cells[1,J]);
b:=StrtoInt(Cells[2,J]);
c:=StrtoInt(Cells[3,J]);
d:=StrtoInt(Cells[4,J]);
if (a+c)>(b+d) then
Cells[5,J] := IntToStr((a+c)-(b+d))
else Cells[6,J] := IntToStr((a+c)-(b+d))
end;
 
你可以用QUERY控件做数据集,而计算的过程在SQL语句里做好,计算结果作成另外的列别名,再用DBGRID显示出来
呀,而不用在外面做文章啊。
对DBGIRD操作很不方便,StringGrid不支持绑定,除非你用DxDBGrid就可以自己修改。
 
这个问题不能通过dbgrid控件来解决,应通过对dbgrid相应的recordset(table,qurey)用
代码游历一遍,每条记录用判断语句比较1+3列和2+4列的值,小的放在字段5,
大的放在字段6,然后dbgrid显示的就是你要的结果了!
假如table1是与dbgrid的datasource相对应的表,那么:
var
n1:integer;
begin
with table1 do
begin
disablecontrols;
open;
first;
while not eof do
begin
n1:=(fields[1].asinteger+fields[3].asinteger)-(fields[2].asinteger+fields[4].asinteger);
edit;
if n1>0 then
fields[5].asinteger:=n1
else
fields[6].asinteger:=n1;
post;
next;
end;
enablecontrols;
end;
end;
 
能给个demo吗?
 
多人接受答案了。
 
后退
顶部