給 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.pswp.cn/diannao/83105.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83105.shtml
英文地址,請注明出處:http://en.pswp.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):創業移情階段的核心要點與實踐方法 在創業的浩瀚征程中,每一個階段都承載著獨特的使命與挑戰。今天,我們繼續秉持共同進步的理念,深入研讀《精益數據分析》,聚焦創業的首…