Delphi数据库控件使用入门(三)

 我来答
新科技17
2022-10-01 · TA获得超过5832个赞
知道小有建树答主
回答量:355
采纳率:100%
帮助的人:72.1万
展开全部

  使用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 会自动把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 TForm FormCreate (Sender : TObject);  Begin  DataSource Dataset := Form Table ;  End;

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

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

lishixinzhi/Article/program/Delphi/201311/8450

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式