首页 > 其他分享 >在Indicator中添加动态Checkbox

在Indicator中添加动态Checkbox

时间:2022-12-17 22:55:33浏览次数:43  
标签:Indicator Checkbox DBGrideh Selection AllowedSelections 全选 添加 gstAll gstRecordBo

先做设置

DBGrideh属性设置:

IndicatorOptions =

[gioShowRowIndicatorEh, //小三角指示

gioShowRecNoEh,    //数据源行号

gioShowRowselCheckboxesEh]  //显示CheckBox

 

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

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

1 2 3 4 5 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,发现了一段关键的代码

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 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,DBGrideh,Selection,AllowedSelections,全选,添加,gstAll,gstRecordBo
From: https://www.cnblogs.com/xionda/p/16989779.html

相关文章

  • 怎么在edge浏览器中添加自己写的插件
    1、首先自己写好插件首先创建一个文件夹用来装插件内容,我这里创建一个test文件夹需要有一个manifest.json。本文描述的是适用于WebExtensions的manifest.json。若您......
  • 为全局请求添加 TraceId ,看日志再也不懵逼
    不知道大家有没有一堆日志就是定位不到那块是异常部分,接口错误无法复现,也找不到报错信息等比较棘手的问题。其实解决上面的问题很简单,只要我们为每一个请求都分配一个唯一的......
  • 1785. 构成特定和需要添加的最少元素
    1785.构成特定和需要添加的最少元素题解:求数组和a和goal的距离每次取最大的limit,如果不能整除则答案还要加一classSolution{publicintminElements(int......
  • Android添加构建依赖项Add Build Dependencies
    TheGradlebuildsysteminAndroidStudiomakesiteasytoincludeexternalbinariesorotherlibrarymodulestoyourbuildasdependencies.Thedependenciesca......
  • 使用 ContentProvider 共享数据 访问与添加通讯录
    1.统一的数据访问方式当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。文件的操作模式中,通过指定文件的操作模式为Contex......
  • 「贪心」构成特定和需要添加的最少元素(力扣第1785题)
    本题为12月16日力扣每日一题题目来源:力扣第1785题题目tag:贪心题面题目描述给你一个整数数组nums,和两个整数limit与goal。数组nums有一条重要属性:abs(nums[i])<=......
  • RiPro主题二级菜单添加小圆点图标
    RiPro主题二级菜单添加小圆点图标效果展示在ripro/assets/css/diy.css中添加下列CSS.lanse{box-sizing:border-box;content:'';width:12px;height:12px;border-radius:50%;......
  • 设计师必看:五个添加光影效果的简…
    现实生活中无时无处不存在着光照和阴影。你看到的每样东西都是通过光影反射形成它的形象。视觉上,光影帮助我们辨别事物,认知他们的材质、尺度和透视。所以如果要让......
  • 芯科BG22学习笔记:7-如何添加SPI
    实验目的:BG22芯片添加SPI功能实验环境:SimplicityStudioV5实验器材:WirelessStarterKitMainboard(BRD4001ARevA01)+ EFR32xG222.4GHz6dBmQFN32RadioBoard......
  • Linuxvim 中批量添加注释
    vim中批量添加注释方法一:块选择模式批量注释:Ctrl+v 进入块选择模式,然后移动光标选中你要注释的行,再按大写的 I 进入行首插入模式输入注释符号如 // 或 #,输入完毕......