zoukankan      html  css  js  c++  java
  • uniDBGrid实行多选表格行

    http://blog.csdn.net/shuiying/article/details/11374655

    uniDBGrid本身是支持checkBox多选的,但必须是Boolean的字段才行,只要是Boolean类型的字段,显示在uniDBgrid中就是带CheckBox的界面。

    网上大多数人推荐的方法是在构建查询串的时候,在查询串中添加一个虚拟的Boolean字段来实现多选记录。但一个系统必然有很多的查询串,都要去加个虚拟字段,维护上太麻烦。可以利用TclientDataSet的计算字段来实现多选,而且不需要修改查询串。首先在设计界面添加以下组件

    设置Query1的SQLConntcion属性为SQLConnection1。

    设置Dsp1的Dataset属性为Query1.

    设置Query1的SQL查询串为:select kh_name from khinfo (你可以更改为自己的实际数据查询)

    设置CDS1的ProviderName属性为DSP1;

    设置DataSource1的Dataset属性为CDS1;

    设置uniGrid的Datasource属性为Datasource1.

    后面简单的步骤如下:

    1.在Delphi设计界面,给ClientDataset添加一个计算字段:CheckBox,如图:

    2.在UniDBgrid中添加一个列,列的FieldName属性选择为新建的字段:checkbox,如图:

    3.在uniGrid控件的OnCellClick事件中写入以下代码:

    [delphi] view plaincopy
     
     
     
    1. if not CDS1.Active then Exit;  
    2. if CDS1.RecordCount=then Exit;  
    3. CDS1.Edit;  
    4. CDS1.FieldByName('checkbox').AsBoolean:= not CDS1.FieldByName('checkbox').AsBoolean;  
    5. CDS1.Post;  


    4.获得取被选择的表格,可以有两种方法

       (1)可以通过遍历clientDataSet的checkbox字段的值来取得被选择的表格记录行,适用于数据量小的时候。

        (2)可以在OnCellClick事件中就用一个StringList类型的变量来记录被选取的数据的记录的主键,进一步处理的时候只需读这个StringList的值就可以,效率要高于遍历clientDataSet,但需要在选中状态改变的时候添加或者移除相应的主键,保持TStringList中记录的主键与界面上选中的记录主键保持同步。

       附一张实际运行的图片:

  • 相关阅读:
    科学开源项目 : 建立一个 新的 光衍射 模型
    光不是电磁波 摩擦力不是电磁力
    收录一篇 贝尔不等式 的 文章
    数学家 程序员 哲学家 艺术家
    论 数学 的 工具性
    数学 怎么用?
    随便说说 广义相对论 的 时间膨胀
    逻辑物理学 : 光子 有 质量 吗 ?
    我对 “光子有质量 , 引力对光子有作用” 存疑
    收录一些 高等数学 的 文章
  • 原文地址:https://www.cnblogs.com/westsoft/p/10344612.html
Copyright © 2011-2022 走看看