先做设置

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. 106 miles to Chicago---zoj2797(最短路问题,求概率,模板)

    题目链接:http://www.icpc.moe/onlinejudge/showProblem.do?problemId=1797 题意是有 n 个点 m 条边,从a到b的不被抓的概率是p,让求从点 ...

  2. 迁移学习与fine-tuning有什么区别

    假设你要处理一个新数据集,让你做图片分类,这个数据集是关于Flowers的,问题是,数据集中flower的类别很少,数据集中的数据也不多,你发现从零开始训练CNN的效果很差,很容易过拟合,怎么办呢,于 ...

  3. java 多线程 day18 ThreadPoolExecutor

    http://blog.csdn.net/lipc_/article/details/52025993 https://www.cnblogs.com/trust-freedom/p/6681948. ...

  4. oracle 安装,登陆,配置

    1:查看: https://blog.csdn.net/u014177640/article/details/71023380/ 2:登陆  https://zhidao.baidu.com/ques ...

  5. 跟我学Makefile(四)

    使用函数:函数调用,很像变量的使用,也是以“$”来标识的,其语法如下: $(<function> <arguments>) 或是 ${<function> < ...

  6. Android开发新手问题

    因为最近在用空闲时间学习Android开发,期间确实遇到了一些问题.而且因为我之前在公司里一直都是在使用Eclipse进行开发,所以最初我学习Android时也就选择了Google的包含android ...

  7. L1正则与L2正则

    L1正则是权值的绝对值之和,重点在于可以稀疏化,使得部分权值等于零. L1正则的含义是 ∥w∥≤c,如下图就可以解释为什么会出现权值为零的情况. L1正则在梯度下降的时候不可以直接求导,可以有以下几种 ...

  8. C++ builder 书籍推荐

    china-pub网上书店c++builder书籍专区,本专区专门为c++builder学习者提供目前最为畅销实用的c++builder技术书籍,通过对本专区c++builder书籍的了解,让您学习c ...

  9. python中的切片

    python中提供了一种很方便的方法来完成取出指定范围内的元素,这种方法就是切片(Slice). 以下为切片的例子: In [1]: L = ['Michael', 'Sarah', 'Tracy', ...

  10. 图解Kerberos认证工作原理

    本文是我在看了这篇英文说明之后的总结 https://technet.microsoft.com/zh-cn/library/cc961976.aspx 是总结,不是翻译,所以是我看后按自己的理解写的 ...