科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Delphi数据库控件使用入门

Delphi数据库控件使用入门

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文详细介绍了Delphi数据控件的属性,方法和使用技巧。

作者:linj 来源:论坛 2007年10月31日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
使用TDBGrid

  TDBGrid构件以栅格的形式显示和编辑数据集中的数据。它的外观很大程度上取决于下面三个因素:l 一是永久的列对象。 二是永久的字段对象。 三是数据集构件的ObjectView属性将影响ADT和数组字段的显示方式。对于TDBGrid构件来说,最重要的属性是Columns,这是一个TDBGridColumns对象,用于管理一组TColumn对象。在设计期,可以打开一个编辑器建立永久的列对象,然后在对象观察器中设置列对象的属性。

  动态的列对象

  如果TDBGridColumns的State属性设为csDefault,列是动态生成的,列的属性取决于字段的属性。当字段的属性发生变化时,列的属性也跟着变化。让列动态生成的好处是,可以在运行期动态地选择其他数据集,而不用担心栅格是否适合于显示新的数据集。例如,可以用同一个TDBGrid构件先显示一个Paradox表,再显示查询另一个数据库的结果。在设计期,无法直接修改动态列对象的属性,只能修改字段对象的属性,从而间接地修改动态列对象的属性。

  动态列对象的生存期也取决于字段对象的生存期。如果数据集没有建立永久的字段对象,那么,当数据集关闭时,所有的动态列对象也将消失。注意:如果在运行期把TDBGridColumns的State属性设为csDefault,将删除所有的列对象,然后根据数据集中的字段对象重建列对象。

  要能够在设计期自定义栅格,就要用到永久的列对象。建立了永久的列对象后,如果TDBGridColumns的State属性设为csCustomized,就可以独立设置每一列的属性。例如,默认情况下,列的标题显示字段的标签即DisplayLabel属性,通过修改TColumnTitle的Caption属性可以重新指定列的标题,而TField的DisplayLabel属性则不会受到影响。TDBGridColumns的State属性设为csCustomized适合于那些数据集的结构是固定不变的情况。如果需要在运行期切换不同的数据集,就不能把State属性设为csCustomized。要创建永久的列对象,首先要在窗体上选择TDBGrid构件,然后对象观察器中单击Columns属性边上的省略号按钮将打开编辑器。

  刚开始的时候,这个编辑器是空白的,这是因为,默认情况下,栅格中的列对象都是动态生成的,还没有永久的列对象。要基于数据集中的每一个字段分别创建一个永久的列对象,可以单击鼠标右键,在弹出的菜单中选择“Add All Fields”命令。要创建一个独立的永久列对象,可以单击工具栏上的(Add New)按钮。选择这个刚创建的列对象,然后在对象观察器中设置FieldName属性指定一个字段,设置Caption属性指定列的标题。要删除一个列对象,可以单击工具栏上的(Delete Selected)按钮。如果把永久的列都删掉,栅格反而能显示数据集中所有的字段,这是因为,永久的列删掉以后,Delphi 4会自动把TDBGridColumns的State属性设为csDefault并且动态生成所有的列。

  要调整列在栅格中显示的顺序,可以用鼠标把列对象前移或后移。对于永久的列对象来说,它的属性的默认值仍然取自于字段,除非您修改了永久列对象的属性。例如,默认的情况下,列的标题就是字段的DisplayLabel属性。如果修改字段的DisplayLabel属性,列的标题将随之改变。但是,一旦您修改了列对象的Caption属性,列的标题不再与字段的DisplayLabel属性存在联动关系,它们彼此是独立的。

  前面讲过,创建一个永久的列对象时,需要设置FieldName属性指定一个字段。不过,您也可以让FieldName属性为空,此时,TColumn对象的Field属性将返回NULL,并且该列在栅格中是空白的。空白的列往往用于用户显示一些自定义的内容,如图像或图表等。几个列对象的FieldName属性可以设为同一个字段。由此可见,TDBGrid的FieldCount属性可能小于栅格的列数。

  数据源

  TDataSource构件是一个非可视的构件,它充当了数据集和数据控件之间的桥梁。每一个数据控件都必须指定一个数据源(TDataSource构件),相应地,TDataSource构件的DataSet属性必须指定一个数据集。下面简单介绍一下TDataSource构件的属性和事件。DataSet属性用于指定一个数据集。在设计期,可以在对象观察器中为DataSet属性选择一个数据集。在运行期,可以通过代码动态地选择数据集。程序示例如下:

With CustSource Do
Begin
If DataSet = 'Customers' then
DataSet := 'Orders'
Else
DataSet := 'Customers';
End;

  也可以指定另一个窗体上的数据集构件,例如:

Procedure TForm2. FormCreate (Sender : TObject);
Begin
DataSource1.Dataset := Form1.Table1;
End;

  一般情况下,TDataSource构件的名称是无关紧要的。不过,TDataSource构件的名称应当能反映它所连接的数据集,例如,假设TDataSource构件连接的数据集叫Customers,相应地,TDataSource构件的名称最好叫CustomersSource。

  Enabled属性用于控制TDataSource构件是否与数据集连接,设为True表示连接,设为False表示暂时断开连接。如果Enabled属性设为False,凡是连接于这个数据源的数据控件将变成空白。如果AutoEdit属性设为True,当用户在数据控件中键入字符时,数据集就自动进入dsEdit状态。如果AutoEdit属性设为False,程序必须调用Edit函数才能进入dsEdit状态。

  当数据集的当前记录的位置发生变化时将触发OnDataChange事件,这可能是因为程序调用了Next、Previous、Insert等方法。当前记录的数据将要被更新时将触发OnUpdateData事件,这可能是因为调用了Post。在处理这个事件的句柄中,可以对数据进行校验。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章