在Indicator中添加动态Checkbox,无需绑定数据源,支持全选 - Ehlib学习(二)
先做设置
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学习(二)的更多相关文章
- 使用JQuery获取被选中的checkbox的value值 以及全选、反选
以下为使用JQuery获取input checkbox被选中的值代码: <html> <head> <meta charset="gbk"> & ...
- 扩展支持全选的CheckBox列。
扩展支持全选的CheckBox列. https://www.codeproject.com/articles/42437/toggling-the-states-of-all-checkboxes-i ...
- QT中添加 动态库(.so) 和 静态库 (.a) 的方法
在QT 的Makefile文件中: 1 添加动态库,如lipcap.so 则,在LIBS一行中添加“-L/usr/local/lib -lpcap”,依据自己的情况修改libpcap.so的路径 2 ...
- JMeter怎么在get URL请求、POST请求中添加动态参数用于服务器段安全验证
从前一个页面(含有服务器段返回给客户端的参数,用于在下一次请求时验证)中添加后置处理器中的Regular Expression Extractor,使用正则表达式对参数进行提取. 在用到这些变量时可以 ...
- jquery checkbox选中状态以及实现全选反选
jquery1.6以下版本获取checkbox的选中状态: $('.ck').attr('checked'); $('.ck').attr('checked',true);//全选 $('.ck'). ...
- 让DuiLib CheckBox支持全选、全不选、非全选三种状态
原文 https://blog.csdn.net/EveyX/article/details/38433783 DuiLib官方库中的Checkbox只有Checked和Uncheck两种状态,但我们 ...
- Web网页树形列表中实现选中父节点则子节点全选和不选中父则子全不选
需要实现的功能:选中父节点对应子节点全选:不选中父节点,对应子节点也不选中 如下图所示,选中车队,对应车队中车辆也全部选中,以实现车队中所有车辆在地图上的显示. 选中cqupt ...
- Jquery 遍历 Table;遍历CheckBox ;遍历Select;全选/全不选
关于Jquery:相信大家已经很熟悉了,我最近的项目运用到关于Jquery的遍历事件:权当总结下: 遍历Table <table id="thistab"> < ...
- 关于checkbox的一些问题(全选,反选,以及取值)
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
随机推荐
- Python开发【Django】:路由规则
Django路由规则 1.基于正则的URL 在templates目录下创建index.html.detail.html文件 <!DOCTYPE html> <html lang=&q ...
- SQL Server 不同网段IP通过名称访问
1, 设置订阅服务器C:\Windows\System32\drivers\etc目录的host文件,添加分发服务器(我的环境是发布服务器与分发服务器 是一起的,所以这里指定的是发布服务器的地址)信息 ...
- Kd-tree的学习
一.普通kd-tree 1.在选择划分维度的时候,不能简单的每一个维度轮流划分.还有一种更合适的是利用数据的方差来划分,哪个维度的方差大,就选择哪一个维度划分.理由解释如下: 最简单的方法就是轮着来, ...
- HTML&CSS&Javascript脑图
今天看了极客学院的CSS3部分,加上前几天看过的HTML5部分,现在对HTML和CSS的基础有了系统的认识,正好发现这张图,简直Perfect! 感谢脑图的制作人,虽然不知道是谁,但能把HTML.CS ...
- http之http1.0和http1.1的区别
下面主要从几个不同的方面介绍HTTP/1.0与HTTP/1.1之间的差别,当然,更多的内容是放在解释这种差异背后的机制上. 1 可扩展性 可扩展性的一个重要原则:如果HTTP的某个实现接收到了自身未定 ...
- 1:3访问 servlet API 的两种方式(request,session等内置对象)
1:解耦方式 2:耦合方式: ========================================== ========================================== ...
- 2016 CCPC 长春 Solution
A - Hanzo vs. Genji 留坑. B - Fraction 水. #include <bits/stdc++.h> using namespace std; inline i ...
- docker 容器目录挂载 | 进出容器
docker run --name wnginx -d -p 9001:80 -v /home/www:/usr/share/nginx/html nginx --name 别名 -d ...
- Stitching模块中focalsFromHomography初步研究
在Stitching模块中,通过“光束法平差”的时候,有一个步骤为“通过单应矩阵估算摄像头焦距”,调用的地方为: , )); ] ]; d2 ] ]) ] ]); v1 ] ] ...
- Ajax请求304问题
ajax默认是开启缓存的,所以get请求如果路径一样,会先找缓存,如果缓存存在就用缓存. 解决方案: 1.在修改url为动态变化的,如url后面加一个×tamp=Date.parse ...