什么是数据绑定型控件与非绑定型控件它们使用时要注意什么

什么是数据绑定型控件与非绑定型控件它们使用时要注意什么,第1张

你想说的是数据库绑定控件吧?

绑定型控件是指可以和数据库绑定使用的控件,它能够将数据库中的数据信息,通过应用程序中的的

数据绑定

控件连接起来。实现对数据库的 *** 作。

visual

basic

中,数据绑定控件有data控件、ADO控件。

data控件默认的数据库类型为:Access(connect属性)。

ADO控件对数据库进行 *** 作前首先要用

connection对象

与数据库建立联系,然后用

recordset对象

来 *** 作、维护数据,

command对象

实现

存储过程

和参数的查询。

aspnet想达到这种表格效果的控件很多,

例如常见的有:

Repeater、DataList、GridView 等

如果是说的是用法,这几种控件都只需要绑定一个数据源就行了。

this控件的ID名称DataSource=TABLE 或者一个集合 //注释:这个是赋值

this控件的ID名称DataBind(); //注释:这个是绑定

其实就算不用控件也可以。在后台拼接一个这种表格然后输出到前台也可以实现。

强大的数据库开发功能无疑是Delphi王冠上的明珠 至少有 %以上的人每天使用Delphi来开发数据库程序 基于积木式的VCL数据库控件 以及Dev Express和Woll Woll等公司提供的强大的第三方数据库明了控件 毫不夸张的说只需要简单的设置一下属性 拖拉几下鼠标我们就可以非常快速的完成数据库程序的开发 由于Delphi的数据库功能过于强大了 所以很多人就忽视了一个事实 就是ActiveX同样可以提供灵活的数据库绑定 遗憾的是Delphi本身所提供的几个第三方的ActiveX控件中没有一个是数据库明了的控件 这间接导致了一个误解 使得很多人误以为Delphi并不支持数据明了的ActiveX控件(也包括很久以前的我J) 这当然是错误的看法

在Delphi中使用数据明了的ActiveX控件

在下面的例子中 我们将使用随Office 安装到系统中的Microsoft Calendar 控件来进行演示 它就是一个数据明了控件 选择Component | Import ActiveX Control 选择Microsoft Calendar (见下图 ) 把类名从TCalendar改成TAXCalendar 以避免同系统中原有的同名控件冲突 然后点Install按钮安装此控件

新建一个程序 在窗体上放置一个TAXCalendar控件 再放上一个DataSource 和Table控件 设定DataSource的Dataset为Table 然后设定Table 的DataBaseName 属性为DBDEMOS TableName 属性为EMPLOYEE DB 最后设定Table Active属性为True

接下来就该进行数据库绑定了 注意一下引入的TAXCalendar具有DataSource和DataBindings这两个同一般ActiveX控件不同的属性 这是因为ActiveX Import Wizard在引入ActiveX控件先判断是否是数据库明了的控件 如果是就以TDBOleControl作为基类进行继承 如果不是就从TOleControl开始继承 而TDBOleControl实现了DataBindings和DataSource属性 设定AXCalendar DataSource属性为Datasource

这时我们在窗体上用鼠标右键单击TAXCalendar控件的话 会发现在右键菜单中多出了一个DataBindings…菜单项(见下图 )

点击菜单项后 会显示数据绑定属性编辑框(见下图 ) 分别在FieldName列表框中选定HireDate 在Property Name列表框中选择Value( )(其中 是Value的Dispid号) 点击Bind按钮 就会在数据库字段和Value属性间建立数据关联

最后 再在窗体上放置一个DBGrid和DBNavigator控件 并设定它们的DataSource为DataSource 运行程序 移动当前数据位置的时候 你可以注意到ActiveX的日期显示也会随之变化 同数据库中的Hiredate保持一致 如图 所示

创建数据明了的ActiveX控件

虽然我们已经清楚了Delphi的确可以使用数据明了的ActiveX控件 那么一个新的问题就产生了 Delphi本身可不可以创建数据明了的ActiveX控件呢?由于Delphi提供了一步到位的ActiveX控件转换生成 就有很多人希望能够把Delphi中强大的数据库控件转换为ActiveX控件 以便能在其他支持ActiveX的开发环境开发数据库程序时仍然能够享受到象在Delphi中一样的轻松愉快的感觉 但是我在前面第一部分中已经提到了 由于Delphi的数据明了控件同ActiveX数据库控件的在内部机制上差距过大 因此Delphi无法简单的直接转换其强大的数据库控件 那么是不是就意味我们就没有办法了呢?of course not! 其实使用类型库编辑器 我们可以异常轻松的实现数据明了的ActiveX控件 就让我们用TEdit控件来试验一下 看看如何去做

选菜单命令New | ActiveX | ActiveX Control启动ActiveX Control Convert Wizard 选TEdit控件作为转化对象 生成EditX ActiveX框架

接下来 我们将改造TEdit的Text属性 使其支持数据绑定 选 View | Type Library来察看Delphi生成的类型库 并选中Text属性 然后切换到Flags属性页(见下图 )

注意在Flags属性页有很多多选框 对于我们来说 只关心同数据绑定相关的选项 它们是Bindable Display Bindable Default Bindable Immediate Bindable和Request Edit选项

标记一个属性为bindable后 并将其同数据库字段绑定后 当用户修改了属性后 控件就会通知数据库值已经变化 并请求数据库记录更新状况 数据库反过来也会通知记录更新是否成功

Bindable选项表明属性支持数据绑定 如果把属性标记为bindable 属性将在其值变化时通知其容器

Request Edit表明属性支持OnRequestEdit 通知消息 这允许控件询问容器属性值是否允许用户修改

Display Bindable表示容器可以向用户显示这个属性是可绑定的

Default Bindable表示它是唯一的 缺省的可绑定属性 使用它必须同时标记了Bindable属性

Immediate Bindable当被标记时 所有的改变都会被通知 同时还需要设定bindable和Request Edit标记

下面我们就标记EditX控件的Text属性为Bindable Display Bindable Default Bindable 和Request Edit 然后点Refresh按钮刷新类型库 最后选Run | Register ActiveX Server注册ActiveX控件

再引入新的EditX ActiveX控件 就会发现它确实实现了数据绑定的功能 下面就是一个使用了数据明了的EditX的程序的运行示意图 (Delphi的ActiveX数据明了功能的实现的确简单很COOL 不是吗?

lishixinzhi/Article/program/Delphi/201311/24662

Delphi作为一种目前十分流行的数据库开发语言 在数据库开发领域有着十分重要的地位 它不仅提供了可视化的开发环境 使得开发变得相对容易 而且还是一种面向对象的语言 使得程序员能够充分利用面向对象编程的种种优势——如封装 继承等等 从而大大减轻了开发的难度和工作量 下面 我们就谈一谈利用面向对象的特性来开发数据库控件的方法

Delphi本身提供了一些数据库控件 如DBGrid Table等 它们给开发带来了很多方便 下面我们来以一个能够显示数据表中的所有字段的控件为例来说明如何用Delphi来进行控件的编程

首先要为控件选择一个合适的父类 Windows的一个好处就在于它将许多 *** 作标准化了 通过这些标准的 *** 作 使得学习和使用都有章可循 用户就很容 易融会贯通地掌握整个系统 在Delphi中提供了许多控件 这些控件生成的应用程序足以满足Windows编程的要求 而一些新的控件也可以在此基础上 产生 它一方面继承了一部分控件标准的 *** 作 另一方面也在程序中加入一些代码来实现特定的功能 这样用户使用起来不会觉得突兀 也简化了程序的开发 根据 我们的目标可以看出 利用 下拉框 控件作为新控件的父类比较合适 因为它提供了下拉框中的所有标准 *** 作 这就可以大大减少我们的编程量 然后就是为 特定的功能编写代码 我们应该想到 如果一个下拉框能够显示一个数据库中的所有字段 那么它一定有一个属性能够与数据库相连 我们将这个属性定名为 DataSource 并将这一属性添加到控件中 添加的方法是 首先在Private段中加入如下代码

FDataLink:TFieldDataLink; function GetDataSource:TDataSource; Procedure SetDataSource( Value:TDataSource);

其中TfieldDataLink是一个十分重要的类 我们之所以能够很容易地进行数据库控件的开发全是拜它之赐 它有一些十分有用的属性 如 DataSource 利用这个属性 我们就能很容易地指定新控件的DataSource属性

第三步就是为控件的功能编写代码 可以想到 如果我们想要在拉下下拉框时显示数据库中的所有字段 就要在它的DropDown事件中加入代码来将所有 的字段加入到下拉框的下拉区域中 这应该分两步走 第一就是要取得指定数据库的所有字段 第二就是将这些字段以字符串的格式加入到下拉框中(而拉下时显示 所有字段的功能则由下拉框控件自己完成) 在取得数据库的字段时 用到了我们上面提到的TfieldDataLink类 下面的代码就可以获得指定数据库 的字段数目

j:= ; j:=FDataLink DataSource DataSet FieldCount ;//取得数据库中的所有字段的名字 I:= ;

然后再用下面的代码将这些字段的名字加入到下拉框的items属性中 值得注意的是在每次拉下这个下拉框时都要将items属性清空 否则这个下拉框将每次都会因加入重复的内容而变得越来越长 并且一次选择可以选定许多项 使得控件看起来有点怪

items Clear ; //清空items属性

repeat //循环 *** 作将字段加入下拉框中

items Add (FDataLink DataSet Fields[I] FieldName ); //将字段名加入到下拉框中

I:=I+ ;

until I>j- ; //直到所有的字段加入完为止

第四步 就是将以上代码加入到Delphi的控件编辑窗口中去 点击Delphi的 Component/New Component 菜单 系统出现一个对话框 将对话框如图 所示填写

填写完毕点击 OK 按钮 就可以创建一个文件 将上面提供的代码加入到文件的适当位置 就可以完成这个控件的编写 图 是带有这个控件的程序的例子

可以想见 这个控件有着十分广泛的功能 例如 我们能够利用它设置指定字段的值来运行查询 也可以返回数据库中指定字段的数据类型 长度等信息 给我们的编程提供了极大的方便

但是也应该看到 这个控件也有一些缺点 那就是它只能显示字段的名称 一般的数据库中字段的名称都是英文的 这给中文版的应用软件带来不便 下面我们 就用FdataLink的另一个属性来显示中文化的字段 这个属性就是DisplayName 它所指定的是数据库字段的显示名称 而这个名称我们可以在 设计时将其汉化 这样在应用程序中显示出来的就是有意义的中文了

lishixinzhi/Article/program/Delphi/201311/8535

使用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属性边上的省略号按钮将打开编辑器

刚开始的时候 这个编辑器是空白的 这是因为 默认情况下 栅格中的列对象都是动态生成的 还没有永久的列对象 要基于数据集中的每一个字段分别创建一个永久的列对象 可以单击鼠标右键 在d出的菜单中选择 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 DoBeginIf DataSet = Customers thenDataSet := Orders ElseDataSet := Customers ;End;

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

Procedure TForm FormCreate (Sender : TObject);BeginDataSource 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

以上就是关于什么是数据绑定型控件与非绑定型控件它们使用时要注意什么全部的内容,包括:什么是数据绑定型控件与非绑定型控件它们使用时要注意什么、asp.net中连接数据库控件的表格是什么、Delphi深度探索-数据库明了的ActiveX控件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10167268.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存