dbgrid应用全书整理版.docx

上传人:b****5 文档编号:30702420 上传时间:2023-08-19 格式:DOCX 页数:104 大小:65.73KB
下载 相关 举报
dbgrid应用全书整理版.docx_第1页
第1页 / 共104页
dbgrid应用全书整理版.docx_第2页
第2页 / 共104页
dbgrid应用全书整理版.docx_第3页
第3页 / 共104页
dbgrid应用全书整理版.docx_第4页
第4页 / 共104页
dbgrid应用全书整理版.docx_第5页
第5页 / 共104页
点击查看更多>>
下载资源
资源描述

dbgrid应用全书整理版.docx

《dbgrid应用全书整理版.docx》由会员分享,可在线阅读,更多相关《dbgrid应用全书整理版.docx(104页珍藏版)》请在冰豆网上搜索。

dbgrid应用全书整理版.docx

dbgrid应用全书整理版

DBGrid应用全书

目录

前言3

一、格式化输出(日期型字段、布尔型)3

二、表格显示设置4

1.改变DBGrid的表头、网格、网格线的前景色和背景色4

2.按设置条件显示单元格或文字的颜色5

1)纵向斑马线效果:

6

2)纵向斑马线,同时以红色突出显示当前单元格效果:

6

3)在数据网格中以红色突出显示当前选中的行:

7

4)行突显的斑马线效果:

7

5)横向斑马线,同时以红色突显当前行效果:

7

6)双向斑马线效果:

即行间用不同色区分,同时,选中行以纵向斑马线效果区分不同的列:

8

3.如何使DBGRID网格的颜色随此格中的数据值的变化而变化8

4.如何动态更新DBGrid的颜色10

5.随意控制DBGrid每一行的颜色简易方法10

6.另外一种可以在在Delphi中随意控制DBGrid每一行颜色的方法11

7.在DBGrid中根据数据的属性不同显示不同的颜色12

三、在Delphi的DBGrid中插入其他可视组件13

四、锁定DBGrid左边的列15

五、实现DBGrid的排序15

1.点击DBGrid的Title对查询结果排序15

2..给DBGrid加入排序功能16

3.双击DBGrid实现排序20

六、去掉DBGrid的自动添加功能21

七、DBGrid不支持鼠标的上下移动的解决代码21

八、DBGrid中移动焦点到指定的行和列22

九、两个Grid的同步滚动23

十、如何在DBGrid中能支持多项记录的选择25

十一、使用DBGrid的复选项29

十二、在一个DBGrid中显示多数据库30

十三、在DBGrid中如何让回车变为光标右移动30

十四、在DBGrid上实现拖放31

十五、如何使DBGrid的指针不移动34

十六、使用DBGrid显示日期34

十七、在DBGrid表格中如何设置按回车键相当于单click35

十八、DBGrid中的下拉列表和查找字段编程方法35

十九、在DBGrid控件中显示图形37

二十、如何侦测DBGrid目前的记录与栏位资讯38

二十一、用DBGrid制作edit录入时的下拉提示框38

二十二、将DBGrid中的内容输出至Excel或ClipBoard41

二十三、怎样获得DBGrid中的cell的坐标43

二十四、DBGrid多层表头设计45

二十五、在DBGrid中实现copy、paste功能46

二十六、禁止在DBGrid中按delete删除记录47

二十七、给DBGrid添加搜索功能47

二十八、数据网格自动适应宽度50

二十九、移除DBGrid的垂直滚动条51

三十、解决DBGrid上下移动的另外一种办法52

三十一、DBGrid中下拉列表的两种设计方法53

1.DBGrid中的下拉列表53

2.DBGrid中的查找字段54

3.DBGrid中的下拉列表和查找字段的区别55

三十二、用DBGrid或DBGrideh如何让所显示数据自动滚动55

三十三、DBGrid对非布尔字段的栏中如何出现CheckBox选择输入56

三十四、DBGrid控件隐藏或显示标题栏56

三十五、点击一个单元格实现对该字段的编辑57

三十六、在DBGrid的左边现像EXCEL那样的自动编号57

三十七、如何将几个DBGRID里的内容导入同一个EXCEL表中59

三十八、把DBGrid输出到Excel表格(支持多Sheet)61

三十九、DBGrid控件的标题栏弹出菜单63

四十、在DELPHI中利用API实现网格内组件的嵌入63

四十一、第三方组件DBGrigEH简介66

 

前言

本书中的内容非本人原创,而仅仅是对网上的“DBGrid应用全书”进行了整理,删除了其中重复的内容,对同内容进行了合并,并增加了目录,以方便读者阅读、查阅。

一、格式化输出(日期型字段、布尔型)

1、在布尔字段中,常用的一种方法是用其来表示性别,但在显示给用户看时,最好又能显示成男、女,以方便用户。

 双击ADOquery,在弹出的窗体中生成静态字段,然后你点取这些静态字段,在OnGetText和OnSetText事件中做如下。

(我一般习惯用男1女0,想像丰富一点,嘿)

procedureTfrmData.TADOquery1SEXGetText(Sender:

TField;varText:

String;

DisplayText:

Boolean);

begin

 ifsender.Value=1thenText:

='男';

 ifsender.Value=0thenText:

='女';

end;

procedureTfrmData.TADOquery1SEXSetText(Sender:

TField;

constText:

String);

begin

 ifText='男'thensender.value:

=1;

 ifText='女'thensender.value:

=0;

end;

2、数值型字段,有时我们喜欢用数值型来表示一些选值,例如:

1、小学生;2、中学生3、大学生;等等,那么同样可以参照上面布尔型的方法

procedureTfrmData.TADOquery1studentTypeGetText(Sender:

TField;varText:

String;

DisplayText:

Boolean);

begin

 ifsender.Value=0thenText:

='小学生';

 ifsender.Value=1thenText:

='中学生';

 ifsender.Value=2thenText:

='大学生';

...

end;

procedureTfrmData.TADOquery1studentTypeSetText(Sender:

TField;

constText:

String);

begin

 ifText='小学生'thensender.value:

=0;

 ifText='中学生'thensender.value:

=1;

 ifText='大学生'thensender.value:

=2;

...

end;

二、表格显示设置

1.改变DBGrid的表头、网格、网格线的前景色和背景色

在Delphi语言的数据库编程中,DBGrid是显示数据的主要手段之一。

但是DBGrid缺省的外观未免显得单调和缺乏创意。

其实,我们完全可以在我们的程序中通过编程来达到美化DBGrid外观的目的。

通过编程,我们可以改变DBGrid的表头、网格、网格线的前景色和背景色,以及相关的字体的大小和风格。

以下的示例程序演示了对DBGrid各属性的设置,使Delphi显示的表格就像网页中的表格一样漂亮美观。

示例程序的运行:

在Form1上放置DBGrid1、Query1、DataSource1三个数据库组件,设置相关的属性,使DBGrid1能显示表中的数据。

然后,在DBGrid1的onDrawColumnCell事件中键入以下代码,然后运行程序,就可以看到神奇的结果了。

本代码在Windows98、Delphi5.0环境下调试通过。

procedureTMainForm.DBGrid1DrawColumnCell(Sender:

TObject;

constRect:

TRect;DataCol:

Integer;Column:

TColumn;State:

TGridDrawState);

vari:

integer;

begin

ifgdSelectedinStatethenExit;

//定义表头的字体和背景颜色:

fori:

=0to(SenderasTDBGrid).Columns.Count-1do

begin

(SenderasTDBGrid).Columns[i].Title.Font.Name:

=\'宋体\';//字体

(SenderasTDBGrid).Columns[i].Title.Font.Size:

=9;//字体大小

(SenderasTDBGrid).Columns[i].Title.Font.Color:

=$000000ff;//字体颜色(红色)

(SenderasTDBGrid).Columns[i].Title.Color:

=$0000ff00;//背景色(绿色)

end;

//隔行改变网格背景色:

ifQuery1.RecNomod2=0then

(SenderasTDBGrid).Canvas.Brush.Color:

=clInfoBk//定义背景颜色

else

(SenderasTDBGrid).Canvas.Brush.Color:

=RGB(191,255,223);//定义背景颜色

//定义网格线的颜色:

DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);

with(SenderasTDBGrid).Canvasdo//画cell的边框

begin

Pen.Color:

=$00ff0000;//定义画笔颜色(蓝色)

MoveTo(Rect.Left,Rect.Bottom);//画笔定位

LineTo(Rect.Right,Rect.Bottom);//画蓝色的横线

Pen.Color:

=$0000ff00;//定义画笔颜色(绿色)

MoveTo(Rect.Right,Rect.Top);//画笔定位

LineTo(Rect.Right,Rect.Bottom);//画绿色的竖线

end;

end;

2.按设置条件显示单元格或文字的颜色

你可在DBGrid元件的DrawDataCell事件中依资料的条件性来改变格子或文字的颜色.

如:

OnDrawDataCell(...)

begin

withTDBGrid(Sender)do

begin

if(条件)then

Canvas.TextOut(Rect.Left+4

Rect.Top+2

\'要显示的文字如表格的资料\');

end;

而你会看到DBGrid的显示资料怎麽有重叠的情况那是因为原本DBGrid要显示的资料与TextOut所显示的资料重叠

解决方法:

在Query元件所加入的栏位(在元件上按右键会有AddFields...的选单)在不要显示资料的栏位的OnGetText事件中有一参数设定为False;

procedureTForm1.Query1Detail1GetText(Sender:

TField;varText:

string;

DisplayText:

Boolean);

begin

//决定在DBGrid得知表格资料时要不要显示所得到的资料False->不显示

//就可避免与TextOut的文字重叠了

DisplayText:

=False;

end;

end;

如果用Delphi3处理很简单.例如:

对表中某字段当其数值小于0时为红字其他为黑字.

在DBGrid.OnDrawColumnCell(...)中:

begin

ifTableField.AsInteger<0then

DBGrid.Canvas.Font.Color:

=clRed

else

DBGrid.Canvas.Font.Color:

=clBlack;

DBGrid.DefaultDrawColumnCell(...);

end;

这样对Field指定的格式仍旧生效不必重写.

实战:

Delphi数据网格色彩特效

Delphi中的数据网格控件(TDBGrid)对于显示和编辑数据库中大量的数据起着十分重要的作用;然而,在使用数据网格控件的同时,也往往因为表格中大量的数据不易区分,而令操作者眼花缭乱。

如何提高网格控件的易用性,克服它的此项不足呢?

本文从改变数据网格的色彩配置角度,提出了一种解决办法。

以下为数据网格控件的6种特殊效果的实现方法,至于数据网格控件与数据集如何连接的方法从略。

1)纵向斑马线效果:

实现网格的奇数列和偶数列分别以不同的颜色显示以区别相邻的数据列。

file:

//在DBGrid的DrawColumnCell事件中编写如下代码:

CaseDataColMod2=0of

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:

//将上述代码修改为:

CaseDataColMod2=0of

True:

DBGrid1.Canvas.Brush.Color:

=clBlue;file:

//偶数列用蓝色

False:

DBGrid1.Canvas.Brush.Color:

=clAqua;file:

//奇数列用浅绿色

End;

If((State=[gdSelected])or(State=[gdSelectedgdFocused]))then

IfNotDBGrid1.SelectedRows.CurrentRowSelectedthen

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=[gdSelectedgdFocused]))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=[gdSelectedgdFocused]))then

begin

CaseDataColMod2=0of

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,将上述代码修改为:

CaseTable1.RecNomod2=0offile:

//根据数据集的记录号进行判断

True:

DBGrid1.Canvas.Brush.color:

=clAqua;file:

//偶数行用浅绿色显示

False:

DBGrid1.Canvas.Brush.color:

=clblue;file:

//奇数行用蓝色表示

end;

if((State=[gdSelected])or(State=[gdSelectedgdFocused]))thenfile:

//选中行用红色显示

DBGrid1.Canvas.Brush.color:

=clRed;

DBGrid1.Canvas.pen.mode:

=pmMask;

DBGrid1.DefaultDrawColumnCell(Rect

DataCol

Column

State);

6)双向斑马线效果:

即行间用不同色区分,同时,选中行以纵向斑马线效果区分不同的列:

file:

//其它属性设置同3,将上述代码修改为:

CaseTable1.RecNomod2=0offile:

//根据数据集的记录号进行判断

True:

DBGrid1.Canvas.Brush.color:

=clAqua;file:

//偶数行用浅绿色显示

False:

DBGrid1.Canvas.Brush.color:

=clblue;file:

//奇数行用蓝色表示

end;

If((State=[gdSelected])or(State=[gdSelectedgdFocused]))then

CaseDataColmod2=0of

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);

上述6种方法分别就数据网格控件的列和行的色彩进行了设置,读者可以根据自己的需要设置特效。

该程序在Delphi5中测试通过。

3.如何使DBGRID网格的颜色随此格中的数据值的变化而变化

在做界面的时候,有时候为了突出显示数据的各个特性(如过大或者过小等),需要通过改变字体或者颜色,本文就是针对这个情况进行的说明。

如何使DBGRID网格的颜色随此格中的数据值的变化而变化。

如<60的网格为红色?

Delphi中数据控制构件DBGrid是用来反映数据表的最重要、也是最常用的构件。

在应用程序中,如果以彩色的方式来显示DBGrid,将会增加其可视性,尤其在显示一些重要的或者是需要警示的数据时,可以改变这些数据所在的行或列的前景和背景的颜色。

  DBGrid属性DefaultDrawing是用来控制Cell(网格)的绘制。

若DefaultDrawing的缺省设置为True,意思是Delphi使用DBGrid的缺省绘制方法来制作网格和其中所包含的数据,数据是按与特定列相连接的Tfield构件的DisplayFormat或EditFormat特性来绘制的;若将DBGrid的DefaultDrawing特性设置成False,Delphi就不绘制网格或其内容,必须自行在TDBGrid的OnDrawDataCell事件中提供自己的绘制例程(自画功能)。

  在这里将用到DBGrid的一个重要属性:

画布Canvas,很多构件都有这一属性。

Canvas代表了当前被显示DBGrid的表面,你如果把另行定义的显示内容和风格指定给DBGrid对象的Canvas,DBGrid对象会把Canvas属性值在屏幕上显示出来。

具体应用时,涉及到Canvas的Brush属性和FillRect方法及TextOut方法。

Brush属性规定了DBGrid.Canvas显示的图像、颜色、风格以及访问WindowsGDI对象句柄,FillRect方法使用当前Brush属性填充矩形区域,方法TextOut输出Canvas的文本内容。

  以下用一个例子来详细地说明如何显示彩色的DBGrid。

在例子中首先要有一个DBGrid构件,其次有一个用来产生彩色筛选条件的SpinEdit构件,另外还有ColorGrid构件供自由选择数据单元的前景和背景的颜色。

  1.建立名为ColorDBGrid的Project,在其窗体Form1中依次放入所需构件,并设置属性为相应值,具体如下所列:

  Table1DatabaseName:

DBDEMOS

TableName:

EMPLOYEE.DB

Active:

True;

  DataSource1DataSet:

Table1

  DBGrid1DataSource1:

DataSource1

DefaultDrawing:

False

  SpinEdit1Increment:

200

Value:

20000

  ColorGrid1GridOrdering:

go16*1

  2.为DBGrid1构件OnDrawDataCell事件编写响应程序:

//这里编写的程序是<60的网格为红色的情况,其他的可以照此类推

  procedureTForm1.DBGrid1DrawDataCell(Sender:

TObject;constRect:

TRect;Field:

TField;State:

TGridDrawState);

  begin

  ifTable1.Fieldbyname(′Salary′).value<=SpinEdit1.valuethen

  DBGrid1.Canvas.Brush.Color:

=ColorGrid1.ForeGroundColor

  else

  DBGrid1.Canvas.Brush.Color:

=ColorGrid1.BackGroundColor;

  DBGrid1.Canvas.FillRect(Rect);

  DBGrid1.Canvas.TextOut(Rect.left+2,Rect.top+2,Field.AsString);

  end;

  这个过程的作用是当SpinEdit1给定的条件得以满足时,如′salary′变量低于或等于SpinEdit1.Value时,DBGrid1记录以ColorGrid1的前景颜色来显示,否则以ColorGr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1