在delphi中经常用到网格控件(dbgrid)显示数据

上传人:xiao****1972 文档编号:84195897 上传时间:2019-03-03 格式:DOC 页数:10 大小:56KB
返回 下载 相关 举报
在delphi中经常用到网格控件(dbgrid)显示数据_第1页
第1页 / 共10页
在delphi中经常用到网格控件(dbgrid)显示数据_第2页
第2页 / 共10页
在delphi中经常用到网格控件(dbgrid)显示数据_第3页
第3页 / 共10页
在delphi中经常用到网格控件(dbgrid)显示数据_第4页
第4页 / 共10页
在delphi中经常用到网格控件(dbgrid)显示数据_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《在delphi中经常用到网格控件(dbgrid)显示数据》由会员分享,可在线阅读,更多相关《在delphi中经常用到网格控件(dbgrid)显示数据(10页珍藏版)》请在金锄头文库上搜索。

1、在DELPHI中经常用到网格控件(DBGrid)显示数据,网格控件只提供了每一行的颜色属性,但在实际应用中我们经常希望它按某一行某一项的取值不同显示不同的颜色,甚至在网格中的单位表格项中显示出图像等等,下面我们以一个简单的例子来告诉大家怎么做。 比如我们要求如果春季有退书用红色表示,如果秋季有退书用黄色表示 利用DBGrid自绘功能可以很容易地实现这样的要求。用户可以处理DBGrid的OnDrawColumnCell事件,在其中实现特殊的效果。要判断记录是否满足要求,可以使用DBGrid的DataLink属性获得数据,但DBGrid的DataLink属性属于保护成员,必须在TCustomDBG

2、rid的子类中调用。 type TMyCustomDBGrid = class(TCustomDBGrid); procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); varsCjts,sQjTs:String;beginwith TMyCustomerDBGrid(Sender) dobeginCjts:=DataLink.Fields5.AsString;sQjts:=DataLi

3、nk.Fields9.AsString;if sCjts then/春季退书数量0的用红色显示Canvas.Brush.Color := clRedelseif sQjts then/秋季退书数量0的用黄色显示Canvas.Brush.Color := clYellowelseCanvas.Brush.Color:=clWhite;Canvas.Font.Color:=clBlack; canvas.fillrect(rect);canvas.textout(rect.left+4,rect.top+4,Column.Field.AsString);end;end;由此方法可以延伸出其它控件的

4、多种修饰方法,比如可以按数据项值采用不同的颜色,可以按记录号显示不同的颜色。总之,灵活应用canvas、rect及bitmap等对象,可以将各种网格装饰得绚丽多彩。 如何才能得到DBGRID的行号,而不是数据集的行号?Edit1.Text :=inttostr(TDrawGrid(DBGrid1).Row); http:/ Delphi 语言的数据库编程中,DBGrid 是显示数据的主要手段之一。但是 DBGrid 缺省的外观未免显得单调和缺乏创意。其实,我们完全可以在我们的程序中通过编程来达到美化DBGrid 外观的目的。通过编程,我们可以改变 DBGrid 的表头、网格、网格线的前景色和背

5、景色,以及相关的字体的大小和风格。以下的示例程序演示了对 DBGrid 各属性的设置,使 Delphi 显示的表格就像网页中的表格一样漂亮美观。示例程序的运行:在 Form1 上放置 DBGrid1、Query1、DataSource1 三个数据库组件,设置相关的属性,使 DBGrid1 能显示表中的数据。然后,在 DBGrid1 的 onDrawColumnCell 事件中键入以下代码,然后运行程序,就可以看到神奇的结果了。本代码在 Windows98、Delphi5.0 环境下调试通过。procedure TMainForm.DBGrid1DrawColumnCell(Sender: TO

6、bject;const Rect: TRect; DataCol: Integer; Column: TColumn;State: TGridDrawState);var i :integer;beginif gdSelected in State then Exit;/定义表头的字体和背景颜色:for i :=0 to (Sender as TDBGrid).Columns.Count-1 dobegin(Sender as TDBGrid).Columnsi.Title.Font.Name :=宋体; /字体(Sender as TDBGrid).Columnsi.Title.Font.S

7、ize :=9; /字体大小(Sender as TDBGrid).Columnsi.Title.Font.Color :=$000000ff; /字体颜色(红色)(Sender as TDBGrid).Columnsi.Title.Color :=$0000ff00; /背景色(绿色)end;/隔行改变网格背景色:if Query1.RecNo mod 2 = 0 then(Sender as TDBGrid).Canvas.Brush.Color := clInfoBk /定义背景颜色else(Sender as TDBGrid).Canvas.Brush.Color := RGB(191

8、, 255, 223); /定义背景颜色/定义网格线的颜色:DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);with (Sender as TDBGrid).Canvas do /画 cell 的边框beginPen.Color := $00ff0000; /定义画笔颜色(蓝色)MoveTo(Rect.Left, Rect.Bottom); /画笔定位LineTo(Rect.Right, Rect.Bottom); /画蓝色的横线Pen.Color := $0000ff00; /定义画笔颜色(绿色)MoveTo(Rect.Rig

9、ht, Rect.Top); /画笔定位LineTo(Rect.Right, Rect.Bottom); /画绿色的竖线end;end; 2003-11-11 17:07:42 问题: Delphi5 - 隔行改变DBGrid网格颜色 在 Form1 上放置 DBGrid1、Query1、DataSource1 三个数据库组件,设置相关的属性,使 DBGrid1 能显示表中的数据。然后,在 DBGrid1 的 onDrawColumnCell 事件中键入以下代码,然后运行程序代码:procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; c

10、onst Rect: TRect;DataCol: Integer; Column: TColumn; State: TGridDrawState);var i:integer;beginif gdSelected in State then Exit; /隔行改变网格背景色: if adoQuery1.RecNo mod 2 = 0 then(Sender as TDBGrid).Canvas.Brush.Color := clinfobk /定义背景颜色else(Sender as TDBGrid).Canvas.Brush.Color := RGB(191, 255, 223); /定义

11、背景颜色/定义网格线的颜色:DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);with (Sender as TDBGrid).Canvas do /画 cell 的边框beginPen.Color := $00ff0000; /定义画笔颜色(蓝色)MoveTo(Rect.Left, Rect.Bottom); /画笔定位LineTo(Rect.Right, Rect.Bottom); /画蓝色的横线Pen.Color := clbtnface; /定义画笔颜色(兰色)MoveTo(Rect.Right, Rect.Top); /

12、画笔定位LineTo(Rect.Right, Rect.Bottom); /画绿色end;end;用BDE中的table1未能通过,颜色没有隔行变化。 2003-11-11 17:12:09 在Delphi的DBGrid中插入其他可视组件 Delphi提供了功能强大的 DBGrid组件,以方便进行数据库应用程序设计。但是如果我们仅仅利用DBGrid组件,每一个获得焦点(Grid)只是一个简单的文本编辑框,不方便用户输入数据。Delphi也提供了一些其他数据组件来方便用户输入,比如DBComboBox,DBCheckBox等组件,但这些组件却没有DBGrid功能强大。Delphi能不能象Visu

13、al Foxpro那样让DBGrid中获得焦点网格可以是其它可视数据组件以方便用户呢?其实我们可以通过在DBGrid中插入其他可视组件来实现这一点。Delphi对DBGrid处理的内部机制,就是在网格上浮动一个组件DBEdit组件。你输入数据的网格其实是浮动DBEdit组件,其他未获得焦点地方不过是图像罢了。所以,在DBGrid中插入其他可视组件就是在网格上浮动一个可视组件。因此任何组件,包括从简单的DbCheckBox到复杂的对话框,都可以在DBGrid中插入。下面就是一个如何在DBGrid中插入DBComboBox组件的步骤,采用同样的办法可以插入其他组件。1、在Delphi 4.0中新建

14、一个项目。2、分别拖动的Data Access组件板上DataSource、Table,Data Controls组件板上DBGrid,DBComboBox四个组件到Form1上。3、设置各个组件的属性如下:rcf1对象 属性 设定植Form1 Caption 在DBGrid中插入SpinEdit组件示例DataSource1 DataSet Table1Table1 DatabaseName DBDEMOSTableName teacher.DBFActive TrueDBGrid1 DataSource DataSource1DBComboBox1 DataField SEXDataSou

15、rce DataSource1Visible FalseStrings Items. 男| 女注意:我在这里用了Teacher.dbf,那是反映教职工的性别,只能是“男”或者是“女”。4、DrawDataCell事件是绘制单元格,当获得焦点网格所对应的字段与组合框所对应的字段一致时,移动组合框到获得焦点的网格上,并且使组合框可视,从而达到在DBGrid指定列上显示DBComboBox的功能。设置DBGrid1的OnDrawDataCell事件如下:procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);beginif (gdFocused in State) thenbeginif (Field.FieldName = DBCo

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号