Delphi DBGrid 实现复选框
1
在数据库对应的表中加入 bit 列验证是否被选中
然后dbgrid第一列的filedname是bit列
在DBgrid的onDrawColumnCell事件中写:
1 2 3 4 5 6 7 8 9 | procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer ; Column: TColumn; State: TGridDrawState); const CtrlState: array [ Boolean ] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED); begin if column . Field . DataType=ftboolean then begin DBGrid1 . Canvas . FillRect(rect); drawframecontrol(DBGrid1 . Canvas . Handle,rect,dfc_button,ctrlstate[column . Field . asboolean]); end ; end ; |
上方事件写完后会在第一行第一列出现复选框
2
在dbgrid的oncellclick事件中写,目的就是实现单击时 复选框被选中
1 2 3 4 5 6 7 8 9 | procedure TcgDaohuodj . DBGrid1CellClick(Column: TColumn); begin if DBGrid1 . SelectedField . DataType=ftboolean then begin DBGrid1 . SelectedField . DataSet . Edit; DBGrid1 . SelectedField . AsBoolean:= not DBGrid3 . SelectedField . AsBoolean; DBGrid1 . SelectedField . DataSet . Post; end ; end ; |
3
在dbgrid的ontitileclick事件中写如下代码,目的是点击bit列是实现全选和全消
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | procedure DBGrid1TitleClick(Column: TColumn); var i: integer ; begin if column . Index= 0 then begin //验证是否第一列 adoquery1 . First; //游标回滚 DBGrid1 . SelectedRows . CurrentRowSelected:= true ; //第一行被选中 if trim(column . Title . Caption)= '全选' then begin for i:= 0 to dbgrid1 . DataSource . DataSet . RecordCount- 1 do begin dbgrid1 . Fields[ 0 ].DataSet . edit; dbgrid1 . Fields[ 0 ].AsBoolean:= true ; dbgrid1 . Fields[ 0 ].DataSet . post; dbgrid1 . datasource . dataset . next; end ; column . Title . Caption:= '全消' ; end else begin for i:= 0 to dbgrid1 . DataSource . DataSet . RecordCount- 1 do begin dbgrid1 . Fields[ 0 ].DataSet . edit; dbgrid1 . Fields[ 0 ].AsBoolean:= false ; dbgrid1 . Fields[ 0 ].DataSet . post; dbgrid1 . datasource . dataset . next; end ; column . Title . Caption:= '全选' ; end ; adoquery1 . First; //游标回滚 DBGrid1 . SelectedRows . CurrentRowSelected:= true ; //选中第一行 end ; end ; |
效果如图:
博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你有所帮助,谢谢!
分类:
Delphi 控N-DBGrid
标签:
Delphi
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报