给 DBGridEh 增加勾选用的检查框 CheckBox

dbgridEh,列中可以有复选框 dbgridEh是增强的dbgrid版本,在字段中可以有复选框。 立即下载

需求

Delphi 的 DBGrid 通过 DataSource 绑定到一个 DataSet 显示数据表里面的 N 多条记录。如果我想给每条记录加一个 CheckBox 让用户去勾选,该怎么做?

以下描述,使用的 DBGrid 是 DBGrieEh。

Delphi 自带的 DBGrid 要加 CheckBox 比较麻烦一点,这里不提。

解决方案之一:

在 DataSet 里面增加一个内部计算字段,字段的数据类型是 Boolean,用于勾选。

1. 在设计期为 DataSet 创建对应数据库的固定字段;

2. 设计期,为 DataSet 新增一个字段,我在这里给字段取名字 Checked,字段类型选择 fkInternalCalc,字段的数据类型选择 Boolean;

3. 设计期,为 DBGrid 添加固定字段。

4. 执行程序,加载数据,就会看到设计期为 DataSet 添加的 Checked 字段,呈现为检查框的模样。使用鼠标点击可以勾选。

5. 我们的代码如何获取用户勾选了哪些记录?对 DataSet 逐条记录循环,查看 Checked 字段的值是否为 True。

此方案的问题:

用户勾选后,DataSet 处于编辑状态,勾选(对 Checked 字段的值的更改)还没有 Post,此时读 DataSet 对应的字段的值,可能还是 False。当然,用户勾选后,用鼠标顺带点一下别的记录,使得 DataSet 自动执行 Post,就没这个问题了。但这样做多一个操作,并且使用者可能忘记这个操作,导致程序执行结果和预期不符。 

解决方案之二

不需要给 DataSet 增加一个计算字段,仅仅是设置 DBGridEh 的属性就可以解决。并且没有方案一的那个让操作者迷惑的问题。

1. DBGridEh 的属性 Options 里面的 dgMultiSelect 设置为 True;设计期的话,就是属性面板里面找到这个属性,勾选它。

2. DBGridEh 的属性 IndicatorOptions 里面的 gioShowRowselCheckboxesEh 设置为 True。设计期的话,同样是属性面板里面找到这个属性,勾选上。

搞定这两步,运行起来,加载数据库的数据,DBGridEh 的第一列就是 CheckBox 检查框。不需要它对应的表有 Boolean 类型的字段。

这个检查框,用户可以点击勾选。那么,我们怎么用代码来检查用户勾选了啥?

假设这个 DBGridEh 对应的表,有一个主键字段是  SNO,那么,读到用户勾选的记录的 SNO 就知道用户勾选了那几条记录。

代码如下

procedure TForm3.Button5Click(Sender: TObject);
var
  i: Integer;
  ABookMark, ABK: TBookMark;
begin
  ABK := ClientDataSet1.GetBookmark;  //先保存当前位置,搞完循环后方便游标回到当前位置

  for i := 0 to DBGridEh1.SelectedRows.Count -1 do
  begin
    ABookMark := DBGridEh1.SelectedRows.Items[i]; //这是个 BookMark
    ClientDataSet1.GotoBookmark(ABookMark);  //游标走到这个 Bookmark
    Memo1.Lines.Add(ClientDataSet1.FieldByName('SNO').AsString); //勾选的记录的编号
  end;

  ClientDataSet1.GotoBookmark(ABK);  //游标回到最开始的位置。
end;

上述代码,是对 DBGridEh 的选择行数做一个循环,然后去它对应的 DataSet 读一个唯一字段(比如主键)的值,就知道用户选择了哪几条记录。这里不需要担心用户勾选后 DataSet 没有 Post 而找不到勾选记录的情况。

结论

使用 DBGridEh 的话,方法之二用户更友好。也无需为 DataSet 增加计算字段,仅仅将 DBGridEh 的两个属性值设置为 True 搞定。

dbgrideh中添加checkbox源码 参照文档中代码的代码,可以轻松实现dbgrideh中添加checkbox复选框,实现全选或反选的功能。 立即下载

相关推荐

DBGRIDEH 增加 checkbox

在DBGRIDEH里添加一个checkbox列,无需在数据库中增加字段

Delphi实现DBGridEh复选框

一、数据库中增加一个字段 给数据库中增加一个字段(sqlserver:bit类型,oracle:char(1)类型),值为0或1。 DBGridEh表格中列属性CheckBoxes设置为True,将KeyList设置为0和1.。 设置完成,点击复选框,即可选中与取消选择,同时数据库中的该字段值也对应改变。 设置DBGridEh表格中的OnTitleClick函数,点击表头,实现全选与全消。 具体实现: 增加字段 设置复选框 设置KeyList 点击单元格选择 数据库同步字段值修改 全选 全消

solo_1108的博客 3969

Qwen3.6-27B 本地部署踩坑实录:两块 4090 折腾一天的真实记录

《Qwen3.6-27B稠密模型部署实战》摘要:本文记录了在双4090(48GB)环境下部署Qwen3.6-27B-FP8量化模型的全过程。重点解决vLLM服务启动时transformers版本不兼容问题,推荐通过构建自定义Docker镜像升级依赖。详细讲解了关键参数配置,包括128K上下文长度保持、MTP推测解码加速等技术细节,并给出显存优化建议。实测表明该稠密模型在27B参数量级下编程能力超越上一代397B MoE模型,单卡即可流畅运行FP8版本,输出速度达90token/s,是开发者理想的编程助手。文

Fzuim的博客 2765

dbgrideh 加入checkbox选择框

1,在adoquery 或者fdquery 加入一个加个字段byte类型type为internalCalc 2,

全粘工程师 1431

把STM32MP135当单片机玩:实战SD卡脱机运行LED程序(基于MP135DK开发板)

本文详细介绍了如何在STM32MP135开发板上实现SD卡脱机运行LED程序,通过裸机开发方式(Bare Metal)利用HAL库完成GPIO控制,并解析了SD卡启动流程。内容涵盖工程创建、代码编写、SD卡烧录及常见问题排查,为开发者提供了一种高性能单片机开发方案。

weixin_33734785的博客 242

win10离线安装.NetFrameWork3.5出现0x800F081F解决办法。

由于公司开发环境是内网,并且安装arcgis10.2又需要.NetFrameWork3.5的环境,安装.NetFrameWork3.5的又总是报错“0x800F081F”找不到源文件。折腾了两天总算解决了。 首先我们能在网上搜索到的教程,你一定看到过这样的教程,就是使用下面的命令来进行安装。 dism /online /Enable-Feature /Featu...

AIGIS的博客 1万+

DBGridEh(增强型表格组件)功能详解

DBGridEh组件无论在外观上还是功能上都非常类似Borland开发工具中现有的dbgrid组件,它除了提供dbgrid组件的全部功能外,还增加了下列新功能:● 任意选择多行、列或矩形区域的数据.● 为多列标题设定共同的父标题行.● 表格底部(Footer) 区显示求和、计数和其它统计信息.● 自动调整组件宽度与客户区域等宽.● 设置标题行、数据行的高度.● 超长的标题行、数据行文本自动折行处理

liucan2000的专栏 3081

宝塔面板添加站点及运营商SSL免费证书的申请与使用

本文详细介绍在宝塔面板下如何正确添加站点、配置站点,及在运营商如何申请免费SSL证书,将其配置到宝塔站点里。 给你的网站加一把锁,教你免费SSL证书申请,配置到自己的网站中。 环境:Ubuntu server 18 工具:宝塔控制面板 平台:阿里云 Web服务器:Nginx 宝塔:https://www.bt.cn/ 阿里云:https://www.aliyun.com/ 腾讯云:https://cloud.tencent.com/ 要求: 1.宝塔控制面板搭建完毕。 2掌握域名解析的原理。 3.了解ht

贺兰山长老 5058

Dbgrideh 动态checkBox 列生成技巧

                Dbgrideh 动态checkBox 列生成技巧 在运用DBGRIDEH控件开发过程中,经常需要对表格内的数据进行选定后处理,通常做法是在表格记录的前面增加个checkbox来选定该记录。如果事先知道对应的数据集合的各字段的内容,则可以为DBGRIDEH增加相应的列,并设定列的属性,当然某列可以设置为checkbox显示的方式。   而在我开发实践中,尽量避免为D

fsldg的专栏 7194

从AXI到CHI:深入解析基于Credit的流量控制如何优化NoC设计

本文深入解析了从AXI握手式流控到CHI基于Credit的流量控制机制的演进。通过对比传统流控的瓶颈,详细阐述了Credit机制如何通过信用预分配和记账系统,有效解决FIFO气泡、时序收敛等难题,从而优化NoC设计的带宽利用率、降低延迟并提升系统可扩展性。

weixin_29227585的博客 522

【毕设实战】飞行器目标识别系统:基于YOLOv5的智能检测全流程教程,助你毕设脱颖而出

亲爱的同学,毕设是不是让你既期待创新又担心技术门槛?如果你的毕设方向是计算机视觉、智能检测,那这个绝对能成为你的“毕设王牌”。从数据准备到界面开发,我会把整个项目拆成“傻瓜式”步骤,让你能一步步做出属于自己的毕设成果。

know_F0727的博客 104

我在DBGridEh增加一栏复选框及对应操作的解决方案

最近客户有个需求,要求对单据列表里指定的单据进行批量审核,很自然的,我想到了在DBGridEh增加一栏复选框的列,审核时遍历所有单据,将打了勾的单据审核就可以了。查阅了网上很多文章,不外有2个方案,1是在数据表里增加字段,2是直接在DBGridEh增加一个没有字段的栏,也许是我笨吧,2种方案试过了都不行,于是只能自己想办法了。研究了半天结合前面的2个方案,我想到了一个解决的方法,分享给大家吧。 ...

数据狂的专栏 4284

Android 15.0 首次开机默认授予app运行时权限(去掉运行时授权弹窗)

在15.0的系统rom产品定制化开发中,在6.0以后对于权限的申请,都需要动态申请,所以会在系统首次启动后,在app的首次运行时, 会弹出授权窗口,会让用户手动授予app运行时权限,在由于系统产品开发需要要求默认授予app运行时权限,不需要用户默认授予运行时弹窗,所以需要在首次开机默认授予所有app运行时权限

安卓兼职framework和app工程师的博客 1204

关于在DBGridEh的一个字段使用checkbox的方法

在DBGridEh的columns中新增加一个字段 1.如果你选择的数据库字段,则选择checkbox为true,并在keylist中输入0和1,就可以了 2.如果你选择的是一个临时字段,在数据集中新增一个临时字段时field type选择internalCalc,然后再如上面操作就可以 了

吾日三省的专栏 4317

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

DBGrid内使用CheckBox功能

  Delphi内DBGrid使用CheckBox功能一般有两种方法,最简单的就是使用第三方控件,如TDBGridEh,使用非常方便,唯一的缺点就是编译出的文件大,大概要大500KB那个样子。另外一种相对简单的方法就是使用DBCheckBox与DBGrid结合并使用绘制控件的方法实现,下面是使用后者实现的一个简单示例,不足之处请指教。 使用DBCheckBox与DBGrid结合并使...

weixin_33979363的博客 1049

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

DBgrid 第一列加入CheckBox,点击列头 全选/全消

真对sqlserver数据说明(其他数据库没有试过): 在数据库对应的表中加入  bit 列验证是否被选中 然后dbgrid第一列的filedname是bit列 在DBgrid的onDrawColumnCell事件中写: procedure DBGrid1DrawColumnCell(Sender: TObject;   const Rect: TRect; DataCol: Integ

lcfeng1982的专栏 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

DBGrid 应用全书

DBGrid 应用全书 作者:陈桂坚  来源于:delphibbs.com  发布时间:2005-12-14 14:14:00 在 Delphi 语言的数据库编程中,DBGrid 是显示数据的主要手段之一。但是 DBGrid 缺省的外观未免显得单调和缺乏创意。其实,我们完全

龙の吻Ж龙文 2317

在Delphi中实现DBGridEh复选框

首先需要在数据库表中添加一个用于存储复选框状态的字段,SQL Server中使用bit类型,Oracle中使用char(1)类型。if trim(column.Title.Caption)='全选' then begin。if column.Index=0 then begin //验证是否第一列。设置KeyList属性为"0"和"1",对应数据库中的值1。column.Title.Caption:='全消';column.Title.Caption:='全选';// 其他设置代码...

chinalog的专栏 689
上一篇: 再谈 FireBird 自增字段在ClientDataSet里如何处理
下一篇: Delphi 的泛型容器如何管理内部对象的生命周期
pcplayer
博客等级 码龄26年 633粉丝 284原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值