当前位置:主页>销售管理软件> 列表

DBGrid显示颜色问题 急!!!

进销存管理软件版1楼: 请问如下表格要改变颜色如何做:
产出量 产水量 产*量
1 日 a1 b1 c1
2 日 a2 b2 c2
3 日 a3 b3 c3
……
要求:(a[i]-a[i-1])/a[i-1]<=2%时,将a[i]的单元格显示为红色。
或:(b[i]-b[i-1])/b[i-1]<=2%时,将b[i]的单元格显示为红色。
……
请问该如何实现?

2楼: 建议把你的条件做到记录里.然后进行判断. 如免费简单进销存软件

3楼: 用SQL语句生成一个计算列,即 a[i]-a[i-1])/a[i-1]
然后在Delphi中根据计算列的结果显示不同的颜色

4楼: 看这个

作者?: archonwang
标题?: DBGrid 应用全书(全面修订正在进行时)
关键字:
分类?: 开发经验
密级?: 公开
http://www.delphibbs.com/keylife/iblog_show.asp?xid=4091

什么效果都可以了

5楼: 不好意思.没分了,可以在这里补充问一下吗?
如果要实现:
2005年9月5日
产水量 产油量 产* 量
1号车间 a b c


2号车间 d e f
……
每个车间的各个产量均与前一天的相应产量作比较,超范围的要将超范围的单元格变成红色。请问我用onDrawColumnCell能够实现么?我在别的地方试过,好像只能实现行的变色,而不能实现单元格变色的效果

6楼: onDrawColumnCell
改成
onDrawDataCell
就可以画单元格了

[b]你还是看看我给你的链接吧,很全的[/b]

进销存管理软件版7楼: chenybin非常感谢你。我看了你的链接。但是onDrawDataCell那段我没太懂。我试了。不过出现错误。运行不了。

8楼: 唉……,怎么又不说出什么错!!!

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
begin
if Table1.FieldByName(''Size'').AsFloat > 10 then
DBGrid1.Canvas.Font.Color := clRed;
DBGrid1.DefaultDrawDataCell(Rect, Field, State);
end;

这个是帮助里面的例子
Rect 就是单元格的范围,可以利用DBGrid1的canvas把这个Rect填充了,Canvas楼主应该清楚吧
Field就是那个字段,可以从里面取值
另外那个参数
type

TGridDrawState = set of (gdSelected, gdFocused, gdFixed);

Description

TGridDrawState represents state information about the cell of a grid that is being rendered. It is a set that includes 0 or more of the following:

Value Meaning

gdSelected The cell is currently selected.
gdFocused The cell has input focus.
gdFixed The cell is in the fixed region of the grid.

DBGrid1.DefaultDrawDataCell(Rect, Field, State); 就表示调用默认的显示,如果不要可以,直接自己TextOut出来也行的,比如
if Table1.FieldByName(''Size'').AsFloat > 10 then begin
DBGrid1.Canvas.Font.Color := clRed;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.TextOut(Rect.left, Rect.top, Field.AsString);
end
else
DBGrid1.DefaultDrawDataCell(Rect, Field, State);


再不行就留下你的QQ

9楼: 呵呵.费心了.太感谢了.等等,我试试

10楼: 非常感谢。