一个关于DBGrid的行记录颜色控制的问题

-HelloWorld- 2011-08-31 03:45:41
问大家一个关于DBGrid的行记录颜色控制的问题:
用两种颜色(假设是白和绿)区分DBGrid中所有的记录,即NO值相同的显示相同颜色,不同的显示不同颜色。例如有:
NO 颜色
1 白
1 白
2 绿
3 白
而搜索所有NO为奇数的显示如下
NO 颜色
1 白
3 绿
3 绿
5 白
5 白
(特别注意网上的那种XXX mod 2 =0 的办法在上面那种情况只有一片白色的哦)
...全文
160 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
-HelloWorld- 2011-09-09
  • 打赏
  • 举报
回复
最后一顶……
-HelloWorld- 2011-09-06
  • 打赏
  • 举报
回复
木有人回答,怎么办……
fslqh 2011-09-04
  • 打赏
  • 举报
回复
同意4楼意见。

IF <条件语句> THEN
BEGIN
DBGRID1.Canvas.Font.Color:=CLBLUE; //字体颜色
dbgrid1.Canvas.Brush.Color:=clInactiveCaption; //背景颜色
DBGRID1.DefaultDrawColumnCell(RECT,DATACOL,COLUMN,STATE); //实现变色
END;
程晨c 2011-09-03
  • 打赏
  • 举报
回复
四楼正解
IF <条件语句> THEN
BEGIN
DBGRID1.Canvas.Font.Color:=CLBLUE; //字体颜色
dbgrid1.Canvas.Brush.Color:=clInactiveCaption; //背景颜色
DBGRID1.DefaultDrawColumnCell(RECT,DATACOL,COLUMN,STATE); //实现变色
END;
-HelloWorld- 2011-09-03
  • 打赏
  • 举报
回复
再来顶一顶,有木有人能告诉我,我的那个问题用dbgrid能不能解决的啊?
-HelloWorld- 2011-09-02
  • 打赏
  • 举报
回复
奇怪,我插入的图片怎么没有的……麻烦高手到我的空间相册里面看吧,
-HelloWorld- 2011-09-02
  • 打赏
  • 举报
回复
感谢10楼的回答,跟我的想法差不多,但比我的简洁多了,但还是有个严重的问题。这个问题我都不知怎么用文字表达,把代码运行起来就清楚了:
举例子吧:随便弄个showmessage,在DBGrid上面弹出个框来如图


点了OK后,我们当然希望背景没什么改变,但却变成了这样:


又如,正常显示如下:


把上图右边的滚动条上下拉动后就变成这样了


或者点击DBGrid中的某个框上下拉就变成这样了:


总的来说就是DBGrid的背景色不稳定吧,怎么解决啊……
zbdzjx 2011-09-01
  • 打赏
  • 举报
回复
先定义两个全局变量GNo,GColor。
在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); //实现变色
-HelloWorld- 2011-09-01
  • 打赏
  • 举报
回复
DBGrid中的记录是来源于SQL的,用ADOQuery查询的
-HelloWorld- 2011-09-01
  • 打赏
  • 举报
回复
可能有点误解的地方,我再描述一次我的问题吧:
用两种颜色(假设是白和绿)区分DBGrid中所有的记录,即NO值相同的显示相同颜色,不同的显示不同颜色。例如有:
NO
1 (第一行背景是白色)
1 (第二行背景是白色)
2 (第三行背景是绿色)
3 (第四行背景是白色)

而搜索所有NO为奇数时显示如下
NO
1 (第一行背景是白色)
1 (第二行背景是白色)
3 (第三行背景是绿色)
5 (第四行背景是白色)
5 (第五行背景是白色)
7 (第六行背景是绿色)
(特别注意网上的那种XXX mod 2 =0 的办法在上面那种情况只有一片白色的哦)
总的来说就两个条件 A、NO值相同的,背景色要一样 B、DBGrid中相邻的两条记录(两行)若NO不同,则颜色不同。

三楼的那位仁兄能不能说详细点呢? 四楼的那位,跟没回答一样……
若能解决问题的话,分不是问题……
-HelloWorld- 2011-09-01
  • 打赏
  • 举报
回复
分开来可以实现啊,但组合起来就不知怎么弄了,我问的就是同时满足上面A、B条件的怎么做的?

两个条件 A、NO值相同的,背景色要一样 B、DBGrid中相邻的两条记录(两行)若NO不同,则颜色不同。
hongss 2011-09-01
  • 打赏
  • 举报
回复
你的第一种模式的颜色区分,就可以用那种 No.值 mod 2=0的方式完成,在DrawCell事件中重绘颜色

第二种模式,根据你自己的要求,总结一个规律(公式),还是用类似 mod 2=0的方式完成就可以了
-HelloWorld- 2011-09-01
  • 打赏
  • 举报
回复
顶起,哪位大侠帮帮忙啊……
kye_jufei 2011-08-31
  • 打赏
  • 举报
回复
在onDrawColumnCell事件中
 IF <条件语句>  THEN
BEGIN
DBGRID1.Canvas.Font.Color:=CLBLUE; //字体颜色
dbgrid1.Canvas.Brush.Color:=clInactiveCaption; //背景颜色
DBGRID1.DefaultDrawColumnCell(RECT,DATACOL,COLUMN,STATE); //实现变色
END;
Q315054403 2011-08-31
  • 打赏
  • 举报
回复
判断条件取颜色值,再在DrawCell里重绘。。。偶写过组件,继承自TDBGrid。。
hongss 2011-08-31
  • 打赏
  • 举报
回复
DrawCell事件控制颜色变化

不过没看懂楼主要怎么做。。。
kaikai_kk 2011-08-31
  • 打赏
  • 举报
回复
有矛盾,俺不明白

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧