DBGrid绑定数据源,数据库中用1、0代表男、女,想在DBGrid的性别列中不显示代码1、0而对应显示男、女,不知怎么实现?
另DBGrid能实现整行选取吗?我还想实现奇、偶行显示不同的颜色?
另DBGrid能实现整行选取吗?我还想实现奇、偶行显示不同的颜色?
解决方案 »
- 求一段代码:将bmp格式图片转化为PCX格式图片(最好是已经编译通过的)谢谢了。
- 我在Image中绘制后,怎么保存绘制的内容。为图片!
- 我用Lookup 字段,为什么编辑时不会更新,要保存才能更新.要如何解决?
- dbgrid行和选择行的颜色改变
- 请问button失去焦点是哪个事件??onexit不是啊,VB就有个onmouseout事件,DELPHI怎没
- help!为什么用ado的程序在access2000能用,但在access97中就不能用了,如果access2000数据库不转换为access97,该如何解决?
- 高分::::屏幕取词,全部判断,有类似词库中的词一律屏蔽掉.请问怎么实现?怎么实现最快?
- DELPHI主程序的参数是什么时候指定的,如何定义?它具有什么作用?
- 我在用ADOTable的filter 时的一个问题???
- 用ADO组件,怎么把复杂查询所得的值复制到另一个表中?有哪些方式?
- 如何在程序中修改系统设置使日期按要求格式显示。
- 关于adotabe和adotataset的区别。
dbgrid的option里面把dgRowSelect置为true.
dbgrid的OnDBGrid1DrawColumnCell时间
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if Column.FieldName='性别字段' then
if Column.Field.asineger=0 then
Dbgrid1.Canvas.TextOut(Rect.Left+2,Rect.Top+3,'女')
else
Dbgrid1.Canvas.TextOut(Rect.Left+2,Rect.Top+3,'男');
end;
if Query1.FieldByName('Sex').asstring = '1'
Query1.FieldByName('计算字段名').asstring := '男'
else
Query1.FieldByName('计算字段名').asstring := '女'
if Field.value = 1 then
Field.DisplayText := 男
else
Field.DisplayText := 女
Q2. 在dbGrid的OnDrawDataCell事件上加上代码来控制。
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if Column.FieldName='性别字段' then
if Column.Field.asineger=0 then
Dbgrid1.Canvas.TextOut(Rect.Left+2,Rect.Top+3,'女')
else
Dbgrid1.Canvas.TextOut(Rect.Left+2,Rect.Top+3,'男')
else
DBgrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
以下为数据网格控件的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 (RectDataColColumnState);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=[gdSelectedgdFocused])) then
If Not DbGrid1.SelectedRows.CurrentRowSelected then
DbGrid1.Canvas.Brush.Color:=clRed; file://当前选中单元格显示红色
DbGrid1.Canvas.Pen.Mode:=pmMask;
DbGrid1.DefaultDrawColumnCell (RectDataColColumnState);
上述两种方法突出了列的显示效果。
3.在数据网格中以红色突出显示当前选中的行。
设置DbGrid控件的Options属性中的dgRowSelect属性为真,Color属性为clAqua(背景色)在DbGrid的DrawColumnCell事件中编写如下代码:
if ((State = [gdSelected]) or (State=[gdSelectedgdFocused])) then
DbGrid1.Canvas.Brush.color:=clRed; file://当前行以红色显示,其它行使用背景的浅绿色
DbGrid1.Canvas.pen.mode:=pmmask;
DbGrid1.DefaultDrawColumnCell (RectDataColColumnState);
4.行突显的斑马线效果:既突出当前行,又区分不同的列(字段)。
file://其它属性设置同3,将上述代码修改为:
if ((State = [gdSelected]) or (State=[gdSelectedgdFocused])) 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 (RectDataColColumnState);
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=[gdSelectedgdFocused])) then file://选中行用红色显示
DbGrid1.Canvas.Brush.color:=clRed;
DbGrid1.Canvas.pen.mode:=pmMask;
DbGrid1.DefaultDrawColumnCell (RectDataColColumnState);
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=[gdSelectedgdFocused])) 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 (RectDataColColumnState);
procedure TForm1.Query1INTDIRECTIONGetText(Sender: TField;
var Text: String; DisplayText: Boolean);
begin
IF SENDER.Value =1 THEN TEXT:='男'
ELSE IF SENDER.Value =0 THEN TEXT:='女';
end;