如何将一组数据感知控件进行集体操作

原创 2004年06月23日 10:16:00

   许多时候你需要把界面中的所有数据感知控件的Readonly都设为true或false,你会怎么做呢?

最早的时候我这样:枚举每个类型,如果有更多,代码将会很多

for i := 0 to ComponentCount - 1 do begin 
        if Components[i] is TDBMemo then begin
            TDBMemo(Components[i]).ReadOnly := true; 
            continue;
        end;
        if Components[i] is TDBRadioGroup then begin
            TDBRadioGroup(Components[i]).ReadOnly := true; 
            continue;
        end; 
        if Components[i] is TDBEdit then begin
            TDBEdit(Components[i]).ReadOnly := true; 
            continue;
        end; 
  ......................

之后我这样,因为数据感知控件都有DataSource和DataField属性,于是使用rtti的信息来设置

for i := 0 to ComponentCount - 1 do begin
        if IsPublishedProp(Components[i], 'DataSource') and
        IsPublishedProp(Components[i], 'DataField') then
        SetVariantProp(Components[i],'ReadOnly',true);

   我想这已经是delphi下最短的代码了,别忘了加入TypInfo单元

   由此想到如果所有的数据感知控件都实现了IDataControl(假想中的名称)接口,我们由TObject.IsImplementorOf来确定是否是一个数据感知控件,这样就不用用上面的DataSource和DataField判断,就非常规范,而且又可以减少一行代码.这样你在操作一组有共性的类时,不用去枚举各个类防止编译错误(如第一种方法),也不用根据经验来找到他们的共性来界定它们(如第2种方法).   我甚至偏执的认为每个类的public方法和published属性都应该在一个接口的定义中,毕竟你不能保证它是唯一的,有可能会有其他的类似类. 而在赋值的时候就只需要把它as 成interface, 代码可能就是下面这个样子

for i := 0 to ComponentCount - 1 do begin
        if Components[i].IsImplementorOf(IDataControl) then
        (Components[i] as IDataControl).ReadOnly := true;

Delphi开发学习二:使用ADOQuery控件对SQL数据库表进行操作

在delphi学习一中,已经使用ADOConnection控件设置属性连接数据库SQL了。 在这里开始使用ADOQuery控件对SQL数据库表进行操作。 首先我们在SQL中创建数据库名为PERSONN...
  • u011846249
  • u011846249
  • 2015年08月17日 20:28
  • 2691

【java】将List中的实体按照某个字段进行分组的算法

使用语言:JAVA 如何将List中存放的实体按照某个字段进行分组呢?来看看下面的例子,假如实体中有个字段叫批次号,我们将具有相同批次号的实体放在一起,那么怎么实现呢?看下面的代码: ...
  • coolcoffee168
  • coolcoffee168
  • 2016年10月18日 09:09
  • 9205

【Qt】窗体间传递数据(跨控件跨类),三种情况与处理方法

C++ Qt
  • shihoongbo
  • shihoongbo
  • 2015年09月23日 16:28
  • 3405

WinForm中利用DataGridView控件对数据进行批量操作

在Winform中将数据库中的多张表同时显示在多个DataGridView中的方法   SQL小知识点总结(一) WinForm中利用DataGridView控件对数据进...
  • u012089657
  • u012089657
  • 2014年10月31日 17:43
  • 359

如何将一组数据从一个区间缩放到另一区间?

如何将一组数据从一个区间缩放到另一区间?
  • rl529014
  • rl529014
  • 2017年01月15日 19:13
  • 1514

对一组数据进行预测

  • 2017年11月10日 20:35
  • 230KB
  • 下载

asp.net如何将页面Table控件中的数据写到excel中总结

我们在做报表统计的时候,在页面中放个服务器端的控件Table1 在cs代码中自动组合行和列   第一种情况:页面有两个按钮,分别为显示报表按钮和导出报表 显示报表按钮将组合成的table中的数据显示到...
  • w200221626
  • w200221626
  • 2011年12月05日 14:48
  • 4774

在winfrom中,如何将数据库的数据显示在datagridview控件上。

虽然datagridview很早就用过,但当时都没有好好得记录、总结。  最近在写oracle的大作业,再一次感受到可以操作数据库的类好多,网上的资料太多,就想好好地总结下到底该怎么用,便于下次的...
  • u013732061
  • u013732061
  • 2014年12月15日 21:00
  • 1393

【机房】-VB中如何将MSFlexGrid控件中的数据导成Excel

在机房收费系统中多次运用到将msflexgrid控件中的记录导成Excel,在一番百度后码实现了这个功能,下面简单介绍一下。 第一步:在工程中引用Microsoft Excel类型库       ...
  • yao940622
  • yao940622
  • 2016年08月27日 11:44
  • 825

java线程中CyclicBarrier的使用—实现一组线程“集齐”后,再进行其他操作

JDK1.6中的API中是这样介绍的:一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地...
  • chenleixing
  • chenleixing
  • 2014年12月26日 22:42
  • 1234
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何将一组数据感知控件进行集体操作
举报原因:
原因补充:

(最多只允许输入30个字)