我用DBGrids显示DB中数据,在程序启动的后,怎么能实现把偶数的那一条记录变成灰色的.
比如:
在程序启动后,DBGrids中显示6条DB中的数据,我要的效果是,第一条不变颜色,第二条灰色,第三天不变颜色,第四条变灰色,依此类推.
比如:
在程序启动后,DBGrids中显示6条DB中的数据,我要的效果是,第一条不变颜色,第二条灰色,第三天不变颜色,第四条变灰色,依此类推.
解决方案 »
- 该死的 unable to find record. No key specified 高手指点下
- delphi中如何响应用createoleobject创建的对象的事件
- delphi 开发串口通讯程序问题
- 做过报表的朋友请来讨论,
- 关于如何取得asf、wma等流媒体文件的播放时间问题
- mediaplay控件在哪个面板里?
- 菜鸟:在delphi中,怎样继承一个窗体?
- delphi写的windows服务程序在win7托盘显示不出来。
- 求 delphi2010 控制WebBrowser 滚动条的方法?
- ActiveForm做的OCX如何能在指定的网页框架中打开指定框架。
- ?????????????如何控制IE以WEB形式打开
- 如果判断一个文本里面输入的数字前三位是不是移动的号码头,就是135 136 137 138 139否则提示出错,
.
DBGrid.DefaultDrawing := false;
.
.
.
procedure TFormMain.DBGridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if (iRowID = 奇数) then//iRowID为全局整型变量,此处判据你应该会写
DBGrid.Canvas.Font.Color := clRed;
else
DBGrid.Canvas.Font.Color := clBlue;
DBGrid.DefaultDrawDataCell(Rect, Column.Field, State);
Inc(iRowID);
end;
如:
if (Table1.RecNo mod 2 ) =0 then
Delphi中的数据网格控件(TDbGrid)对于显示和编辑数据库中大量的数据起着十分重要的作用;然而,在使用数据网格控件的同时,也往往因为表格中大量的数据不易区分,而令操作者眼花缭乱。如何提高网格控件的易用性,克服它的此项不足呢?本文从改变数据网格的色彩配置角度,提出了一种解决办法。
以下为数据网格控件的6种特殊效果的实现方法,至于数据网格控件与数据集如何连接的方法从略。
1. 纵向斑马线效果:实现网格的奇数列和偶数列分别以不同的颜色显示,以区别相邻的数据列。
file://在DbGrid的DrawColumnCell事件中编写如下代码:
Case DataCol Mod 2 = 0 of
True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色
False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
End;
DbGrid1.Canvas.Pen.Mode:=pmMask;
DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
2. 纵向斑马线,同时以红色突出显示当前单元格效果:以突出显示当前选中的字段。
file://将上述代码修改为:
Case DataCol Mod 2 = 0 of
True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色
False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
End;
If ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
If Not DbGrid1.SelectedRows.CurrentRowSelected then
DbGrid1.Canvas.Brush.Color:=clRed; file://当前选中单元格显示红色
DbGrid1.Canvas.Pen.Mode:=pmMask;
DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
上述两种方法突出了列的显示效果。
3.在数据网格中以红色突出显示当前选中的行:
设置DbGrid控件的Options属性中的dgRowSelect属性为真,Color属性为clAqua(背景色), 在DbGrid的DrawColumnCell事件中编写如下代码:
if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
DbGrid1.Canvas.Brush.color:=clRed; file://当前行以红色显示,其它行使用背景的浅绿色
DbGrid1.Canvas.pen.mode:=pmmask;
DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
4.行突显的斑马线效果:既突出当前行,又区分不同的列(字段)。
file://其它属性设置同3,将上述代码修改为:
if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
begin
Case DataCol Mod 2 = 0 of
True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列显示红色
False: DbGrid1.Canvas.Brush.color:=clblue; file://当前选中行的奇数列显示蓝色
end;
DbGrid1.Canvas.pen.mode:=pmmask;
DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
end;
5.横向斑马线,同时以红色突显当前行效果:
file://其它属性设置同3,将上述代码修改为:
Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断
True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示
False: DbGrid1.Canvas.Brush.color:=clblue; file://奇数行用蓝色表示
end;
if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then file://选中行用红色显示
DbGrid1.Canvas.Brush.color:=clRed;
DbGrid1.Canvas.pen.mode:=pmMask;
DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
6.双向斑马线效果:即行间用不同色区分,同时,选中行以纵向斑马线效果区分不同的列。
file://其它属性设置同3,将上述代码修改为:
Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断
True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示
False: DbGrid1.Canvas.Brush.color:= clblue; file://奇数行用蓝色表示
end;
If ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
Case DataCol mod 2 = 0 of
True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列用红色
False: DbGrid1.Canvas.Brush.color:= clGreen; file://当前选中行的奇数列用绿色表示
end;
DbGrid1.Canvas.pen.mode:=pmMask;
DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
7. 随意控制DBGrid 每一行的颜色:
Var
p : Integer;
begin
p := Table1.FindField('wage').AsInteger;
//取得当前记录的Wage字段的值。
if(p < 500) then begin
//程序将根据wage值设置各行的颜色。
Color := clGreen;
Font.Style := [fsItalic];
//不仅可以改变颜色,还可以改变字体
end;
if (p >= 500) And (p < 800) then
Color := clRed;
if(p >=800) then begin
Color := clMaroon;
Font.Style := [fsBold];
end;
end;
begin
if DataSource.DataSet.RecNo mod 2=1 then
begin
Canvas.Font.Color:= clNone;
Canvas.Brush.Color:= clCream;
end
else begin
Canvas.Font.Color:= clNone;
Canvas.Brush.Color:= clInactiveCaptionText;
end;
DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;