AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > Delphi

第十六章 数据浏览部件的应用及编程(二)

51自学网 http://www.51zixue.net

在TDBGrid部件中显示数据库表中的记录信息时,如果TDBGrid使用数据集部件在运行过程中动态生成的字段部件时,TDBGrid显示数据库表中的记录是按表中记录的缺省顺序和字段的缺省顺序显示表中的记录信息,而且要显示表中各个记录的全部字段的值。而在大多数情况下,用户可能希望按自己喜欢的字段顺序显示记录的各个字段,有时还希望只显示记录的部分字段值,要达到这一目的,必须在设计阶段使用字段编辑器来创建永久性的字段部件,并且还要设置各个字段部件有关的属性。

当使用字段编辑器(Fields Editor)创建永久性的字段部件提供给TDBGrid部件来使用时,我们可以在TDBGrid部件中更灵活地显示数据库表中的记录信息。例如在字段编辑器中的Fields列表框中我们可以设定字段部件的显示顺序,在设定好字段的显示顺序之后,TDBGrid部件便按这个顺序显示记录的各个字段值,当我们设置字段部件的DisplayFormat和EditFormat属性之后,在TDBGrid部件中便相应地以设定的显式和编辑格式显示字段值和编辑字段值;当设置某一个字段部件的Required属性为True时,当插入一条新记录时,必须要为该字段输入相应的字段值,否则会出错;通过设置字段部件的Visible属性,可以确定相应的字段值是否在TDBGrid组件中显示。有关使用字段编辑器来创建字段部件,设置字段部件的属性请参看3.6.2节。 

16.4.1 TDBGrid部件的主要属性及应用 

TDBGrid部件是用于显示和编辑数据库表中的记录信息的重要部件,它是我们在程序设计过程当中要经常使用的、灵活地用于显示和编辑数据库表中的记录信息的一个强有力的工具。TDBGrid具有很多重要的属性,我们可以在程序设计阶段和程序运行过程中进行设置。TDBGrid部件的一些重要属性及其设置方法请参看联机帮助文件。TDBGrid部件中一些重要的属性是Option属性、DrawMode属性和DefaultDrawing属性,我们重点对两个属性进行阐述。

Options属性:它是TDBGrid部件的一个扩展属性,在程序设计阶段设置Options属性可以控制TDBGrid部件的显示特性和对事件的响应特性。Options属性在TDBGrid部件的属性栏中显示时,它的前面带有一个“+”标志,双击“+”标志,便可以展开一个布尔型属性列表,用户可以逐个地修改其中的各个属性值,修改完毕后可以双击Options属性前的“-”标志,使TDBGrid部件的属性列表恢复到原来的显示状态。

表16.5列出了Options属性中包含的所有的扩展属性项以及它们对TDBGrid部件的影响。 

表16.5 TDBGrid部件的Options属性中的扩展属性项

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

属 性 名 取 值 及 影 响

─────────────────────────────────

dbEditing True: 缺省情况下为此值,确保用户能够在网格中编辑插

入和删除数据库表中的记录

False:在网格中不能编辑、插入和删除表中的记录

─────────────────────────────────

dbAlwaysShow True: 当用户选中记录中的一个字段时,自动地使该字段

Editor 处于编辑状态

False:缺省情况下为此值。当一个字段被选中,它不能

自动地变成编辑状态

─────────────────────────────────

dgTitles True: 缺省情况下为此值。在网格的第一行中显示字段名

或字段标题

False:在网格中不显示字段名或字段对应的标题

─────────────────────────────────

dgIndicator True: 缺省情况下为此值。在网格的最左边用一个黑箭头

标注当前记录指针所在的位置,在插入状态时,箭

头变成星状,在编辑状时,箭头变成"I"头。

False:在网格中不标识当前记录指针的位置

─────────────────────────────────

dgColumnResize True: 缺省情况下为此值。通过拖拉网格的垂直分隔线可

以改变网格中各列的宽度,在具体操作时要拖拉各

列中显示字段标题区域中的垂直分隔线。

False:网格中各列的宽度不能改变

─────────────────────────────────

dgCloLines True: 缺省情况下为此值。在网格中显示各列之间的垂直

分隔线。

False:在网格中不显示垂直分隔线

─────────────────────────────────

dgRowLines True: 缺省情况下为此值。在网格中显示各行之间的水平

分隔线。

False:在网格中不显示水平分隔线。

─────────────────────────────────

dgTabs True: 缺省情况下为此值。可以在记录的各字段之间移动

输入焦点(也即选择提示棒)

False:不能在记录的名字段之间移动输入焦点,在网格中

按Tab键时,直接跳出网格

─────────────────────────────────

dgRowSelect True: 选择提示棒覆盖整条记录中的全部字段

False:缺省情况下为此值。选择提示棒一次只覆盖记录中

的一个字段

─────────────────────────────────

dgAlwaysShow True: 缺省情况下为此值。在网格始终显示选择提示棒,即

-Selection 使其控件获得焦点时,也是如此。

False:只在当网格获得焦点时,才显示选择提示棒。

─────────────────────────────────

dbConfirmDelete True: 缺省情况下为此值。当在网格中删除记录时,弹出确

认信息。

False:在网格中删除记录时不弹出确认信息。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

 

用户想了解这些可选属性项的作用和影响,还可以参看联机帮助信息。

DragMode属性:该属性有两个可选的属性值。当它的值被设置为dmManual时,在应用程序运行过程中,用户可以用鼠标拖放网格中的各列,改变各列在网格中的显示顺序和位置。当用鼠标拖放网格中的一列、改变它在网格中的位置时,只是改变了该列在数据集中的位置,并没有改变它对应的数据库表中的位置。当该属性的值被设置成dmAutomatic时,用户不能用鼠标拖放网格中的各列而改变它在网格中的位置。

DefalultDrawing属性:该属性是布尔型属性,它用于控制网格中各网格单元的绘制方式。在缺省情况下,该属性的值为True,也就是说Delphi使用网格本身缺省的方法绘制网格中各网格单元,并填充各网格单元中的内容,各网格单元中的数据根据其对应的字段部件的DisplayFormat属性和EidtFormat属性进行显示和绘制。如果DefaulDrawing属性被设置为False时,Delphi不会自动地绘制网格中各网格单元和网格单元中的数据,用户必须自己为TDBGrid部件的OnDrawDataCell事件编写相应的程序用于绘制各网格单元和其中的数据。

在了解了TDBGrid部件的各个属性之后,我们便可以使用TDBGrid部件来显示和编辑数据库表中的数据了。图16.5所示的应用窗体中各部件的属性设置如表16.6所示。

 

表16.6 各部件的属性设置

━━━━━━━━━━━━━━━━━━━━

属 性 名 属 性 值

────────────────────

Table1.DatabaseName DEMOS

Table1.TableName Customer.DB

Table1.CanModify True

DataSource1.DataSet Table1

DataSource1.AutoEdit True

DBGrid1.Datasource DataSource1

DBGrid1.ReadOnly False

━━━━━━━━━━━━━━━━━━━━

 

在其他数据浏览部件(如TDBEdit)中编辑修改其中的内容时,只要用户用Tab键或鼠标将焦点移到其他部件时,用户对该字段的修改会自动地写回到数据库表中,使用TDBGrid部件编辑修改数据库表时,Delphi是以记录为基本单位将修改写回磁盘上的数据库表的。用户在编辑和修改表中的当前记录时,只有用户将记录指针移到其他的记录时,Delphi才将用户对当前记录的修改写回到磁盘上的数据库表,否则,用户即使改变焦点到窗体中的其他部件,Dephi也不会投寄用户对当前记录的修改。Delphi在向数据库表投寄TDBGrid部件中的被修改的记录时,它会自动地检查所有与当前数据库相连的数据浏览部件的状态,只要其中有任何一数据浏览部件正在修改数据,这时会弹出出错信息,并且当前记录的修改不会被投寄(即被写回磁盘上的数据库表)。

<

 

 

 
上一篇:第十七章 SQL编程(一)  下一篇:第十六章&nbsp;数据浏览部件的应用及编程(一)