现在有两个dbgrid,一个A,一个B, 在A,B中各有一些记录,现在问题是:如何实现点击A中的一条记录,如果B中有与A中相同的,则将B中的那条记录用红色显示?

  • 主题发起人 主题发起人 bgqy2000
  • 开始时间 开始时间
B

bgqy2000

Unregistered / Unconfirmed
GUEST, unregistred user!
现在有两个dbgrid,一个A,一个B, 在A,B中各有一些记录,现在问题是:如何实现点击A中的一条记录,如果B中有与A中相同的,则将B中的那条记录用红色显示?(50分)<br />现在有两个dbgrid,一个A,一个B, 在A,B中各有一些记录,现在问题是:如何实现点击A中的一条记录,如果B中有与A中相同的记录,则将B中的那条记录用红色(其它颜色也行)显示?
 
这个并不难,但要描述出来就有点难了....
1.先定义一个变量就叫fFound吧,
var
fFound: Boolean;
2.定义一个类,用来画颜色的
type
TMyGrid=Class(TDBGrid);
3.在第一个表格单击时查找grid2里是否存在,如果存在就将
fFound:=True,不存在当然False了
4.然后在grid2的OnDrawColumnCell事件里写代码,就是改变颜色了
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
with TMyGrid(Sender) do
begin
if fFound and (DataLink.ActiveRecord = Row - 1) then
Canvas.Font.Color := clRed;
defaultDrawColumnCell(Rect,DataCol,Column,State);
end;
end;

都在上面了,不知楼主理解了否?
 
谢谢楼上的,现在不明白的就是怎么触发grid2的DBGrid1DrawColumnCell呢?现在就是不知道怎么触发
 
这个你不用管的,你只要把fFound:=True就行了
 
单击DBGRIDA里写,DBGRIDA.datasourse.dataset.Refresh
 
DBGrid1DrawColumnCell是自动触发的,照上面我所写的做不会错..
 
if B.datasource.dataset.locate('key','keyvalue',[]) then
begin
{
將B表中的找到記錄的顏色改變
}
end;
 
可以改变颜色了,谢谢,呵呵
 
多人接受答案了。
 
后退
顶部