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

需求

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);
vari: Integer;ABookMark, ABK: TBookMark;
beginABK := ClientDataSet1.GetBookmark;  //先保存当前位置,搞完循环后方便游标回到当前位置for i := 0 to DBGridEh1.SelectedRows.Count -1 dobeginABookMark := DBGridEh1.SelectedRows.Items[i]; //这是个 BookMarkClientDataSet1.GotoBookmark(ABookMark);  //游标走到这个 BookmarkMemo1.Lines.Add(ClientDataSet1.FieldByName('SNO').AsString); //勾选的记录的编号end;ClientDataSet1.GotoBookmark(ABK);  //游标回到最开始的位置。
end;

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

结论

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/83105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WordPress 和 GPL – 您需要了解的一切

如果您使用 WordPress,GPL 对您来说应该很重要,您也应该了解它。查看有关 WordPress 和 GPL 的最全面指南。 您可能听说过 GPL(通常被称为 WordPress 的权利法案),但很可能并不完全了解它。这是有道理的–这是一个复杂…

力扣144题:二叉树的前序遍历(递归)

小学生一枚,自学信奥中,没参加培训机构,所以命名不规范、代码不优美是在所难免的,欢迎指正。 标签: 二叉树、前序遍历、递归 语言: C 题目: 给你二叉树的根节点root,返回它节点值…

python:一个代理流量监控的媒体文件下载脚本

前言 一个mitmproxy代理服务应用,作用是监听系统流量,并自动下载可能的video媒体文件到本地。 如果你没有安装mitmproxy或没有做完准备工作,请参考我的这篇文章: python:mitmproxy代理服务搭建-CSDN博客 文件架构目录…

SAP Business One(B1)打开自定义对象报错【Failed to initialize document numbering:】

业务场景: 新版本的客户端,打开已经注册的自定义单据类型的表的时候,报错【Failed to initialize document numbering:】。 但是注册的自定义主数据类型的表,不会有问题。 解决方案: 打开【管理-系统初始化-常规设置…

计算机网络:WiFi路由器发射的电磁波在空气中的状态是什么样的?

WiFi路由器发射的电磁波是高频无线电波,属于微波频段(2.4GHz或5GHz),在空气中以光速传播(约310⁸米/秒),其传播状态和特性可通过以下维度详细解析: 一、电磁波的物理特性 频率与波长 2.4GHz频段:波长约12.5厘米,穿透力较强但易受干扰(微波炉、蓝牙等共用频段)。5GH…

腾讯云-人脸核身+人脸识别教程

一。产品概述 慧眼人脸核身特惠活动 腾讯云慧眼人脸核身是一组对用户身份信息真实性进行验证审核的服务套件,提供人脸核身、身份信息核验、银行卡要素核验和运营商类要素核验等各类实名信息认证能力,以解决行业内大量对用户身份信息真实性核实的需求&a…

tocmat 启动怎么设置 jvm和gc

在生产环境中部署 Java Web 应用时,我们经常需要给 Tomcat 设置 JVM 参数和 GC 策略,以提高性能、稳定性和可观察性。以下是完整教程: 一、Tomcat 设置 JVM 启动参数的方式 1. 修改 startup 脚本(推荐) 以 Linux 系统…

zuoyyyeee

实验拓扑图 需求分析 1.分配接口ip 2.使用OSPF协议使三台路由器可达 3.在路由器1,2 /4,5 使用直连接口直接配置EBGP ip配置: [R1]: bgp 100 rid 1.1.1.1 peer 12.0.0.2 as-number 200 network 1.1.1.1 32 [R2]: bgp 200 rid 2.2.2.2 p…

‌Element UI 双击事件(@cell-dblclick 与 @row-dblclick)

‌Element UI 双击事件(cell-dblclick 与 row-dblclick) 一、核心双击事件绑定‌ 表格单元格双击‌ ‌事件绑定‌: 通过 cell-dblclick 监听单元格双击,接收四个参数(row, column, cell, event)。 ‌示…

Python爬虫实战:研究decrypt()方法解密

1. 引言 1.1 研究背景与意义 在当今数字化时代,网络数据蕴含着巨大的价值。然而,许多网站为了保护其数据安全和商业利益,会采用各种加密手段对传输的数据进行处理。这些加密措施给数据采集工作带来了巨大挑战。网络爬虫逆向解密技术应运而生,它通过分析和破解网站的加密机…

day014-服务管理

文章目录 1. 提问的方式1.1 注意事项1.2 start法则-提问/面试 2. systemctl 系统服务管理2.1 开启和自启动服务sshd2.2 关闭和永久禁用防火墙2.3 查看服务的状态2.4 重启服务2.5 sshd重启失败案例 3. localectl 字符集管理3.1 临时修改语言3.2 永久修改语言3.3 用脚本修改语言 …

【redis】CacheAside的数据不一致性问题

缓存的合理使用确提升了系统的吞吐量和稳定性,然而这是有代价的,这个代价便是缓存和数据库的一致性带来了挑战。 新增数据时,数据直接写入数据库,缓存中不存在对应记录。首次查询请求会触发缓存回填,即从数据库读取新…

DA14585墨水屏学习

一、do_min_word void do_min_work(void) {timer_used_min app_easy_timer(APP_PERIPHERAL_CTRL_TIMER_DELAY_MINUTES, do_min_work);current_unix_time time_offset;time_offset 60;// if (isconnected 1)// {// GPIO_SetActive(GPIO_LED_PORT, GPIO_LED_PIN);// …

微服务调试问题总结

本地环境调试。 启动本地微服务,使用公共nacos配置。利用如apifox进行本地代码调试解决调试问题。除必要的业务微服务依赖包需要下载到本地。使用mvn clean install -DskipTests进行安装启动前选择好profile环境进行启动,启动前记得mvn clean清理项目。…

C#学习第22天:网络编程

网络编程的核心概念 1. 套接字(Sockets) 定义:套接字是网络通信的基本单元,提供了在网络中进行数据交换的端点。用途:用于TCP/UDP网络通信,支持低级别的网络数据传输。 2.协议 TCP(Transmiss…

TWASandGWAS中GBS filtering and GWAS(1)

F:\文章代码\TWASandGWAS\GBS filtering and GWAS README.TXT 请检查幻灯片“Vitamaize_update_Gorelab_Ames_GBS_filtering_20191122.pptx”中关于阿姆斯(Ames)ID处理流程的详细信息。 文件夹“Ames_ID_processing”包含了用于处理阿姆斯ID的文件和R…

图像处理篇---opencv实现坐姿检测

文章目录 前言一、方法概述使用OpenCV和MediaPipe关键点检测角度计算姿态评估 二、完整代码实现三、代码说明PostureDetector类find_pose()get_landmarks()cakculate_angle()evaluate_posture() 坐姿评估标准(可进行参数调整):可视化功能&…

.Net HttpClient 使用代理功能

HttpClient 使用代理功能 实际开发中,HttpClient 通过代理访问目标服务器是常见的需求。 本文将全面介绍如何在 .NET 中配置 HttpClient 使用代理(Proxy)功能,包括基础使用方式、代码示例、以及与依赖注入结合的最佳实践。 注意…

【学习路线】 游戏客户端开发入门到进阶

目录 游戏客户端开发入门到进阶:系统学习路线与推荐书单一、学习总原则:从底层出发,项目驱动,持续迭代二、推荐学习路线图(初学者→进阶)第一阶段:语言基础与编程思维第二阶段:游戏开…

精益数据分析(57/126):创业移情阶段的核心要点与实践方法

精益数据分析(57/126):创业移情阶段的核心要点与实践方法 在创业的浩瀚征程中,每一个阶段都承载着独特的使命与挑战。今天,我们继续秉持共同进步的理念,深入研读《精益数据分析》,聚焦创业的首…