1、dbgrid应用全书整理版DBGrid应用全书目录前言 3一、格式化输出(日期型字段、布尔型 ) 3二、表格显示设置 41. 改变 DBGrid 的表头、网格、网格线的前景色和背景色 42. 按设置条件显示单元格或文字的颜色 51)纵向斑马线效果: 62)纵向斑马线,同时以红色突出显示当前单元格效果: 63)在数据网格中以红色突出显示当前选中的行: 74)行突显的斑马线效果: 75)横向斑马线, 同时以红色突显当前行效果: 76)双向斑马线效果:即行间用不同色区分,同时,选中行以纵向斑马线效果区分不同的列: 83. 如何使DBGRID网格的颜色随此格中的数据值的变化而变化 84. 如何动态更新
2、DBGrid的颜色 105. 随意控制DBGrid 每一行的颜色简易方法 106. 另外一种可以在在Delphi中随意控制DBGrid 每一行颜色的方法 117. 在DBGrid中根据数据的属性不同显示不同的颜色 12三、在Delphi的DBGrid中插入其他可视组件 13四、锁定DBGrid左边的列 15五、实现DBGrid的排序 151. 点击DBGrid的Title对查询结果排序 152. .给DBGrid加入排序功能 163. 双击DBGrid实现排序 20六、去掉DBGrid的自动添加功能 21七、DBGrid不支持鼠标的上下移动的解决代码 21八、DBGrid中移动焦点到指定的行和
3、列 22九、两个Grid的同步滚动 23十、如何在DBGrid中能支持多项记录的选择 25十一、使用 DBGrid 的复选项 29十二、在一个DBGrid中显示多数据库 30十三、在 DBGrid 中如何让回车变为光标右移动 30十四、在DBGrid上实现拖放 31十五、如何使DBGrid的指针不移动 34十六、使用DBGrid显示日期 34十七、在DBGrid表格中如何设置按回车键相当于单click 35十八、DBGrid 中的下拉列表和查找字段编程方法 35十九、在DBGrid控件中显示图形 37二十、如何侦测DBGrid目前的记录与栏位资讯 38二十一、用DBGrid制作edit录入时的
4、下拉提示框 38二十二、将 DBGrid 中的内容输出至 Excel 或 ClipBoard 41二十三、怎样获得DBGrid中的cell的坐标 43二十四、DBGrid多层表头设计 45二十五、 在 DBGrid 中实现 copy、paste 功能 46二十六、禁止在DBGrid中按delete删除记录 47二十七、给 DBGrid 添加搜索功能 47二十八、数据网格自动适应宽度 50二十九、移除DBGrid的垂直滚动条 51三十、解决DBGrid上下移动的另外一种办法 52三十一、DBGrid中下拉列表的两种设计方法 531. DBGrid 中 的 下 拉 列 表 532. DBGrid
5、中 的 查 找 字 段 543. DBGrid 中的下拉列表和查找字段的区别 55三十二、 用 DBGrid 或 DBGrideh 如何让所显示数据自动滚动 55三十三、DBGrid 对非布尔字段的栏中如何出现 CheckBox 选择输入 56三十四、DBGrid控件隐藏或显示标题栏 56三十五、点击一个单元格实现对该字段的编辑 57三十六、在DBGrid的左边现像EXCEL那样的自动编号 57三十七、如何将几个DBGRID里的内容导入同一个EXCEL表中 59三十八、把DBGrid输出到Excel表格(支持多Sheet) 61三十九、DBGrid控件的标题栏弹出菜单 63四十、在DELPHI
6、中利用API实现网格内组件的嵌入 63四十一、第三方组件DBGrigEH简介 66前言 本书中的内容非本人原创,而仅仅是对网上的“DBGrid应用全书”进行了整理,删除了其中重复的内容,对同内容进行了合并,并增加了目录,以方便读者阅读、查阅。一、格式化输出(日期型字段、布尔型 )1、在布尔字段中,常用的一种方法是用其来表示性别,但在显示给用户看时,最好又能显示成男、女,以方便用户。双击ADOquery,在弹出的窗体中生成静态字段,然后你点取这些静态字段,在OnGetText和OnSetText事件中做如下。(我一般习惯用男女,想像丰富一点,嘿)procedure TfrmData.TADOqu
7、ery1SEXGetText(Sender: TField; var Text: String; DisplayText: Boolean);beginif sender.Value=1 then Text := 男;if sender.Value=0 then Text := 女;end;procedure TfrmData.TADOquery1SEXSetText(Sender: TField; const Text: String);beginif Text = 男 then sender.value :=1;if Text = 女 then sender.value :=0;end;
8、2、数值型字段,有时我们喜欢用数值型来表示一些选值,例如:、小学生;、中学生、大学生;等等,那么同样可以参照上面布尔型的方法procedure TfrmData.TADOquery1studentTypeGetText(Sender: TField; var Text: String; DisplayText: Boolean);beginif sender.Value=0 then Text := 小学生;if sender.Value=1 then Text := 中学生;if sender.Value=2 then Text := 大学生; .end;procedure TfrmData
9、.TADOquery1studentTypeSetText(Sender: TField; const Text: String);beginif Text = 小学生 then sender.value :=0;if Text = 中学生 then sender.value :=1;if Text = 大学生 then sender.value :=2; .end; 二、表格显示设置1. 改变 DBGrid 的表头、网格、网格线的前景色和背景色在 Delphi 语言的数据库编程中,DBGrid 是显示数据的主要手段之一。但是 DBGrid 缺省的外观未免显得单调和缺乏创意。其实,我们完全可以
10、在我们的程序中通过编程来达到美化DBGrid 外观的目的。通过编程,我们可以改变 DBGrid 的表头、网格、网格线的前景色和背景色,以及相关的字体的大小和风格。 以下的示例程序演示了对 DBGrid 各属性的设置,使 Delphi 显示的表格就像网页中的表格一样漂亮美观。 示例程序的运行: 在 Form1 上放置 DBGrid1、Query1、DataSource1 三个数据库组件,设置相关的属性,使 DBGrid1 能显示表中的数据。然后,在 DBGrid1 的 onDrawColumnCell 事件中键入以下代码,然后运行程序,就可以看到神奇的结果了。本代码在 Windows98、Del
11、phi5.0 环境下调试通过。procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn;State: TGridDrawState);var i :integer;begin if gdSelected in State then Exit;/定义表头的字体和背景颜色: for i :=0 to (Sender as TDBGrid).Columns.Count-1 do begin (Sender as TDBGrid).Col
12、umnsi.Title.Font.Name :=宋体; /字体 (Sender as TDBGrid).Columnsi.Title.Font.Size :=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.
13、Color := clInfoBk /定义背景颜色 else (Sender as TDBGrid).Canvas.Brush.Color := RGB(191, 255, 223); /定义背景颜色/定义网格线的颜色: DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State); with (Sender as TDBGrid).Canvas do /画 cell 的边框 begin Pen.Color := $00ff0000; /定义画笔颜色(蓝色) MoveTo(Rect.Left, Rect.Bottom); /画笔定位 Line
14、To(Rect.Right, Rect.Bottom); /画蓝色的横线 Pen.Color := $0000ff00; /定义画笔颜色(绿色) MoveTo(Rect.Right, Rect.Top); /画笔定位 LineTo(Rect.Right, Rect.Bottom); /画绿色的竖线 end;end; 2. 按设置条件显示单元格或文字的颜色 你可在 DBGrid 元件的 DrawDataCell 事件中依资料的条件性来改变格子或文字的颜色.如 :OnDrawDataCell(.)begin with TDBGrid(Sender) do begin if (条件) then Ca
15、nvas.TextOut(Rect.Left + 4 Rect.Top + 2要显示的文字如表格的资料);end; 而你会看到 DBGrid 的显示资料怎麽有重叠的情况那是因为原本DBGrid要显示的资料与 TextOut 所显示的资料重叠 解决方法 : 在 Query 元件所加入的栏位(在元件上按右键会有 Add Fields.的选单)在不要显示资料的栏位的 OnGetText 事件中有一参数设定为 False;procedure TForm1.Query1Detail1GetText(Sender: TField; var Text: string;DisplayText: Boolean
16、);begin / 决定在 DBGrid 得知表格资料时要不要显示所得到的资料False - 不显示 / 就可避免与 TextOut 的文字重叠了 DisplayText : = False;end;end; 如果用 Delphi 3 处理很简单.例如:对表中某字段当其数值小于0时为红字其他为黑字.在 DBGrid.OnDrawColumnCell(.) 中:begin if TableField.AsInteger 0 then DBGrid.Canvas.Font.Color := clRed else DBGrid.Canvas.Font.Color := clBlack; DBGrid
17、.DefaultDrawColumnCell(.);end;这样对 Field 指定的格式仍旧生效不必重写. 实战:Delphi数据网格色彩特效 Delphi中的数据网格控件(TDBGrid)对于显示和编辑数据库中大量的数据起着十分重要的作用;然而,在使用数据网格控件的同时,也往往因为表格中大量的数据不易区分,而令操作者眼花缭乱。如何提高网格控件的易用性,克服它的此项不足呢?本文从改变数据网格的色彩配置角度,提出了一种解决办法。 以下为数据网格控件的6种特殊效果的实现方法,至于数据网格控件与数据集如何连接的方法从略。1)纵向斑马线效果:实现网格的奇数列和偶数列分别以不同的颜色显示以区别相邻的数
18、据列。file:/在DBGrid的DrawColumnCell事件中编写如下代码:Case DataCol Mod 2 = 0 ofTrue: DBGrid1.Canvas.Brush.Color:= clBlue; file:/偶数列用蓝色False: DBGrid1.Canvas.Brush.Color:= clAqua; file:/奇数列用浅绿色End;DBGrid1.Canvas.Pen.Mode:=pmMask;DBGrid1.DefaultDrawColumnCell (RectDataColColumnState);2)纵向斑马线,同时以红色突出显示当前单元格效果:以突出显示当
19、前选中的字段。file:/将上述代码修改为:Case DataCol Mod 2 = 0 ofTrue: DBGrid1.Canvas.Brush.Color:= clBlue; file:/偶数列用蓝色False: DBGrid1.Canvas.Brush.Color:= clAqua; file:/奇数列用浅绿色End;If (State = gdSelected) or (State=gdSelectedgdFocused) thenIf Not DBGrid1.SelectedRows.CurrentRowSelected thenDBGrid1.Canvas.Brush.Color:
20、=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) t
21、henDBGrid1.Canvas.Brush.color:=clRed; file:/当前行以红色显示,其它行使用背景的浅绿色DBGrid1.Canvas.pen.mode:=pmmask;DBGrid1.DefaultDrawColumnCell (RectDataColColumnState);4)行突显的斑马线效果:既突出当前行,又区分不同的列(字段)。file:/其它属性设置同3,将上述代码修改为:if (State = gdSelected) or (State=gdSelectedgdFocused) thenbeginCase DataCol Mod 2 = 0 ofTrue
22、: 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:/根据数据
23、集的记录号进行判断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 (R
24、ectDataColColumnState);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=gdSelect
25、edgdFocused) thenCase DataCol mod 2 = 0 ofTrue : DBGrid1.Canvas.Brush.color:=clRed; file:/当前选中行的偶数列用红色False: DBGrid1.Canvas.Brush.color:= clGreen; file:/当前选中行的奇数列用绿色表示end;DBGrid1.Canvas.pen.mode:=pmMask;DBGrid1.DefaultDrawColumnCell (RectDataColColumnState); 上述6种方法分别就数据网格控件的列和行的色彩进行了设置,读者可以根据自己的需要设置
26、特效。该程序在Delphi5中测试通过。 3. 如何使DBGRID网格的颜色随此格中的数据值的变化而变化 在做界面的时候,有时候为了突出显示数据的各个特性(如过大或者过小等),需要通过改变字体或者颜色,本文就是针对这个情况进行的说明。 如何使DBGRID网格的颜色随此格中的数据值的变化而变化。如60的网格为红色? Delphi中数据控制构件DBGrid是用来反映数据表的最重要、也是最常用的构件。在应用程序中,如果以彩色的方式来显示DBGrid,将会增加其可视性,尤其在显示一些重要的或者是需要警示的数据时,可以改变这些数据所在的行或列的前景和背景的颜色。DBGrid属性DefaultDrawin
27、g是用来控制Cell(网格)的绘制。若DefaultDrawing的缺省设置为True,意思是Delphi使用DBGrid的缺省绘制方法来制作网格和其中所包含的数据,数据是按与特定列相连接的Tfield构件的DisplayFormat或EditFormat特性来绘制的;若将DBGrid的DefaultDrawing特性设置成False,Delphi就不绘制网格或其内容,必须自行在TDBGrid的OnDrawDataCell事件中提供自己的绘制例程(自画功能)。在这里将用到DBGrid的一个重要属性:画布Canvas,很多构件都有这一属性。Canvas代表了当前被显示DBGrid的表面,你如果把
28、另行定义的显示内容和风格指定给DBGrid对象的Canvas,DBGrid对象会把Canvas属性值在屏幕上显示出来。具体应用时,涉及到Canvas的Brush属性和FillRect方法及TextOut方法。Brush属性规定了DBGrid.Canvas显示的图像、颜色、风格以及访问Windows GDI 对象句柄,FillRect方法使用当前Brush属性填充矩形区域,方法TextOut输出Canvas的文本内容。以下用一个例子来详细地说明如何显示彩色的DBGrid。在例子中首先要有一个DBGrid构件,其次有一个用来产生彩色筛选条件的SpinEdit构件,另外还有ColorGrid构件供自
29、由选择数据单元的前景和背景的颜色。1.建立名为ColorDBGrid的Project,在其窗体Form1中依次放入所需构件,并设置属性为相应值,具体如下所列: Table1 DatabaseName: DBDEMOS TableName: EMPLOYEE.DB Active: True; DataSource1 DataSet: Table1 DBGrid1 DataSource1: DataSource1 DefaultDrawing: False SpinEdit1 Increment:200 Value: 20000 ColorGrid1 GridOrdering: go1612.为D
30、BGrid1构件OnDrawDataCell事件编写响应程序:/这里编写的程序是60的网格为红色的情况,其他的可以照此类推procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;Field: TField; State: TGridDrawState);begin if Table1.Fieldbyname(Salary).value=SpinEdit1.value then DBGrid1.Canvas.Brush.Color:=ColorGrid1.ForeGroundColor else DBGrid1.Canvas.Brush.Color:=ColorGrid1.BackGroundColor; DBGrid1.Canvas.FillRect(Rect); DBGrid1.Canvas.TextOut(Rect.left2,Rect.top2,Field.AsString);end;这个过程的作用是当SpinEdit1给定的条件得以满足时,如salary变量低于或等于SpinEdit1.Value时,DBGrid1记录以ColorGrid1的前景颜色来显示,否则以ColorGr
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1