先做设置

DBGrideh属性设置:

IndicatorOptions =

[gioShowRowIndicatorEh, //小三角指示

gioShowRecNoEh,    //数据源行号

gioShowRowselCheckboxesEh]  //显示CheckBox

Options = [……, dgMultiSelect]  //开启多选,才能对CheckBox进行编辑

以上设置完成,功能就有了,对于选中的行进行遍历读取

  for I := 0 to DBGrideh.SelectedRows.Count - 1 do
begin
DBGrideh.DataSource.DataSet.Bookmark := DBGrideh.SelectedRows[I]; //定位
…… //读取定位后数据源其他操作
end;

补充全选及反选功能

DBGrideh.Selection.Rows.SelectAll;    //全选,此时  SelectionType=gstRecordBookmarks
//下面会提到一个AllowedSelections,结合下文,这里不能用DBGrideh.Selection.SelectAll, 它的SelectionType=gstAll DBGrideh.Selection.Clear; //全部取消

在以上基础上做一个全选功能升级。

默认DBGrideh的设置中有如下设置

AllowedSelections = [gstRecordBookmarks,gstRectangle,gstColumns,gstAll]

此时,鼠标点击DBGrideh左上角IndicatorTitle可以触发全选事件,不过却无法对全选的数据记录进行利用,查找了下DBGrideh.pas,发现了一段关键的代码

procedure TCustomDBGridEh.DefaultIndicatorTitleMouseDown(Cell: TGridCoord;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
DropdownMenu: TPopupMenu;
P: TPoint;
ARect: TRect;
begin
......
end else if (dgMultiSelect in Options) and
DataLink.Active and ([gstRecordBookmarks, gstAll] * AllowedSelections <> []) then
begin
if Selection.SelectionType <> gstNon then
Selection.Clear
else if gstAll in AllowedSelections then
Selection.SelectAll
else if gstRecordBookmarks in AllowedSelections then
Selection.Rows.SelectAll;
end;
end;

DBGrideh是通过Bookmarks定位数据源游标行的,在此,默认设置AllowedSelections中[gstAll,gstRecordBookmarks],当触发IndicatorTitle鼠标点击事件时,发现上一段代码运行是先检查gstAll,然后检查gstRecordBookmarks,所以虽然全选了,但是无法定位数据源游标,所以只要在AllowedSelections中去掉[gstAll]即可

-----------------------------------

回复中有人提出通过此种方法,点击DBGrideh任意地方,所选行容易消失

解决方法是设置DBGrideh中OptionsEh,使dghClearSelection=false

设置如下

OptionsEh = [..., dghClearSelection, ...]//,此内dghClearSelection去掉
    

在Indicator中添加动态Checkbox,无需绑定数据源,支持全选 - Ehlib学习(二)的更多相关文章

  1. 使用JQuery获取被选中的checkbox的value值 以及全选、反选

    以下为使用JQuery获取input checkbox被选中的值代码: <html> <head> <meta charset="gbk"> & ...

  2. 扩展支持全选的CheckBox列。

    扩展支持全选的CheckBox列. https://www.codeproject.com/articles/42437/toggling-the-states-of-all-checkboxes-i ...

  3. QT中添加 动态库(.so) 和 静态库 (.a) 的方法

    在QT 的Makefile文件中: 1 添加动态库,如lipcap.so 则,在LIBS一行中添加“-L/usr/local/lib -lpcap”,依据自己的情况修改libpcap.so的路径 2 ...

  4. JMeter怎么在get URL请求、POST请求中添加动态参数用于服务器段安全验证

    从前一个页面(含有服务器段返回给客户端的参数,用于在下一次请求时验证)中添加后置处理器中的Regular Expression Extractor,使用正则表达式对参数进行提取. 在用到这些变量时可以 ...

  5. jquery checkbox选中状态以及实现全选反选

    jquery1.6以下版本获取checkbox的选中状态: $('.ck').attr('checked'); $('.ck').attr('checked',true);//全选 $('.ck'). ...

  6. 让DuiLib CheckBox支持全选、全不选、非全选三种状态

    原文 https://blog.csdn.net/EveyX/article/details/38433783 DuiLib官方库中的Checkbox只有Checked和Uncheck两种状态,但我们 ...

  7. Web网页树形列表中实现选中父节点则子节点全选和不选中父则子全不选

                需要实现的功能:选中父节点对应子节点全选:不选中父节点,对应子节点也不选中 如下图所示,选中车队,对应车队中车辆也全部选中,以实现车队中所有车辆在地图上的显示. 选中cqupt ...

  8. Jquery 遍历 Table;遍历CheckBox ;遍历Select;全选/全不选

    关于Jquery:相信大家已经很熟悉了,我最近的项目运用到关于Jquery的遍历事件:权当总结下: 遍历Table <table  id="thistab"> < ...

  9. 关于checkbox的一些问题(全选,反选,以及取值)

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

随机推荐

  1. 理解Java异常处理机制的机理

    重看异常机制的时候觉得抓到了点机理上的精髓,所以来说一下,对初学者应该会有些帮助   JAVA中的异常机制 从机制上由[产生异常][抛出异常][捕捉异常][异常处理]组成 从形式上又分为四种: 运行时 ...

  2. EasyUI Easyloader 加载器

    用法 加载 EasyUI 模块 easyloader.base = '../'; // 设置 easyui 的基本目录 easyloader.load('messager', function(){ ...

  3. 接口测试之接口api文档的重要性

    接口文档的特点 接口文档,顾名思义就是对接口说明的文档.好的接口文档包含了对接口URL,参数以及输出内容的说明,我们参照接口文档就能编写出一个个的测试用例.而且接口文档详细的话,测试用例编写简单,不会 ...

  4. 转载Liferay PortletPreference store()方法研究

    我们对于PortletPreference 的store()用的非常广泛,很多情况下,我们一般对其进行一些设定,然后最后调用store()存储之,类似以下代码: PortletPreferences ...

  5. linux centos7 erlang rabbitmq安装

    最终的安装目录为/opt/erlang 和 /opt/rabbitmq wget http://erlang.org/download/otp_src_21.0.tar.gztar zxvf otp_ ...

  6. Mail.Ru Cup 2018 Round 1

    A. Elevator or Stairs? 签. #include <bits/stdc++.h> using namespace std; ]; int main() { while ...

  7. oracle中 start with .. connect by prior.. 用法简介

    我们经常会将一个比较复杂的目录树存储到一个表中.或者将一些部门存储到一个表中,而这些部门互相有隶属关系.这个时候你就会用到connect by prior start with.oracle 提供了s ...

  8. 20145221 《Java程序设计》第一周学习总结

    20145221 <Java程序设计>第一周学习总结 教材学习内容总结 第一周内容已在假期完成,详见博客: Hello Java! 开源中国的代码托管 代码调试中的问题和解决过程 第一周内 ...

  9. #ZLYD团队第二周项目总结

    ZLYD团队第二周项目总结 项目进展 确定项目内容.目标.实现计划 首先确定游戏界面的游戏区域中墙的位置,绘制其图形,并通过其中的方法,返回墙壁的位置等属性. 根据豆子的位置,绘制其图形. 初始化吃豆 ...

  10. js模拟类的创建以及继承的四部曲

    <script> 1)创建父类 function Person(){ } Person.prototype.age = 18;//给父类添加属性 var p1 = new Person() ...