问大家一个关于DBGrid的行记录颜色控制的问题:
用两种颜色(假设是白和绿)区分DBGrid中所有的记录,即NO值相同的显示相同颜色,不同的显示不同颜色。例如有:
NO 颜色
1 白
1 白
2 绿
3 白
而搜索所有NO为奇数的显示如下
NO 颜色
1 白
3 绿
3 绿
5 白
5 白
(特别注意网上的那种XXX mod 2 =0 的办法在上面那种情况只有一片白色的哦)
用两种颜色(假设是白和绿)区分DBGrid中所有的记录,即NO值相同的显示相同颜色,不同的显示不同颜色。例如有:
NO 颜色
1 白
1 白
2 绿
3 白
而搜索所有NO为奇数的显示如下
NO 颜色
1 白
3 绿
3 绿
5 白
5 白
(特别注意网上的那种XXX mod 2 =0 的办法在上面那种情况只有一片白色的哦)
IF <条件语句> THEN
BEGIN
DBGRID1.Canvas.Font.Color:=CLBLUE; //字体颜色
dbgrid1.Canvas.Brush.Color:=clInactiveCaption; //背景颜色
DBGRID1.DefaultDrawColumnCell(RECT,DATACOL,COLUMN,STATE); //实现变色
END;
用两种颜色(假设是白和绿)区分DBGrid中所有的记录,即NO值相同的显示相同颜色,不同的显示不同颜色。例如有:
NO
1 (第一行背景是白色)
1 (第二行背景是白色)
2 (第三行背景是绿色)
3 (第四行背景是白色)而搜索所有NO为奇数时显示如下
NO
1 (第一行背景是白色)
1 (第二行背景是白色)
3 (第三行背景是绿色)
5 (第四行背景是白色)
5 (第五行背景是白色)
7 (第六行背景是绿色)
(特别注意网上的那种XXX mod 2 =0 的办法在上面那种情况只有一片白色的哦)
总的来说就两个条件 A、NO值相同的,背景色要一样 B、DBGrid中相邻的两条记录(两行)若NO不同,则颜色不同。三楼的那位仁兄能不能说详细点呢? 四楼的那位,跟没回答一样……
若能解决问题的话,分不是问题……
在onDrawColumnCell事件中
IF adoquery1.fieldbyname('No').asinteger=GNo THEN
begin
DBGRID1.Canvas.Font.Color:=GColor //字体颜色
end
else
BEGIN
if GColor = CLWhite then
begin
DBGRID1.Canvas.Font.Color:=CLGreen; //字体颜色
GColor := CLGreen;
end
else
begin
DBGRID1.Canvas.Font.Color:=CLWhite; //字体颜色
GColor := CLWhite;
end;
END
GNo := adoquery1.fieldbyname('No').asinteger;
DBGRID1.DefaultDrawColumnCell(RECT,DATACOL,COLUMN,STATE); //实现变色
举例子吧:随便弄个showmessage,在DBGrid上面弹出个框来如图
点了OK后,我们当然希望背景没什么改变,但却变成了这样:
又如,正常显示如下:
把上图右边的滚动条上下拉动后就变成这样了
或者点击DBGrid中的某个框上下拉就变成这样了:
总的来说就是DBGrid的背景色不稳定吧,怎么解决啊……
IF <条件语句> THEN
BEGIN
DBGRID1.Canvas.Font.Color:=CLBLUE; //字体颜色
dbgrid1.Canvas.Brush.Color:=clInactiveCaption; //背景颜色
DBGRID1.DefaultDrawColumnCell(RECT,DATACOL,COLUMN,STATE); //实现变色
END;
BEGIN
DBGRID1.Canvas.Font.Color:=CLBLUE; //字体颜色
dbgrid1.Canvas.Brush.Color:=clInactiveCaption; //背景颜色
DBGRID1.DefaultDrawColumnCell(RECT,DATACOL,COLUMN,STATE); //实现变色
END;