我在DBGridEh增加一栏复选框及对应操作的解决方案
最近客户有个需求,要求对单据列表里指定的单据进行批量审核,很自然的,我想到了在DBGridEh增加一栏复选框的列,审核时遍历所有单据,将打了勾的单据审核就可以了。查阅了网上很多文章,不外有2个方案,1是在数据表里增加字段,2是直接在DBGridEh增加一个没有字段的栏,也许是我笨吧,2种方案试过了都不行,于是只能自己想办法了。研究了半天结合前面的2个方案,我想到了一个解决的方法,分享给大家吧。
一、在sql语句里增加一个字段
原来:select * from tbPerson
修改为:select *,bSel=Name from tbPerson
这样就多了一个和Name相同的字段,这个bSel就是一会要做成复选框栏目对应的字段
二、DBGridEh增加一列,字段名就是SQL语句里增加的bSel,CheckBoxes设为True, KeyList第1行是1,第2行是0。
三、在DataSet打开后,要将这个字段的内容清空,设为默认值0,为未选中状态。我用的是ADOQuery,设LockType为ltBatchOptimistic,允许修改表格内容。
procedure TForm_PRW0.QueryListAfterOpen(DataSet: TDataSet);
begin
with QueryList do
begin
First;
try
DisableControls; //禁止滚屏
while not Eof do
begin
if (FieldByName('bSel').AsString<>'1') and (FieldByName('bSel').AsString<>'0') then //设置默认值是0,就是未选中状态
begin
Edit;
FieldByName('bSel').AsString:='0';
Post;
end;
Next;
end;
First;
EnableControls; //允许滚屏
except
end;
end;
end;
四、在审核过程中使用这个字段
1、全选
procedure TForm_PRW0.ActionSelAllExecute(Sender: TObject);
var
vMark:TBookmark;
begin
with QueryList do
begin
if not Active then Exit;
vMark:=GetBookmark;
First;
try
DisableControls;
while not Eof do
begin
Edit;
FieldByName('bSel').AsString:='1';
Next;
end;
GotoBookmark(vMark);
except
end;
EnableControls;
end;
end;
2、审核前遍历所有单据
procedure TForm_PRW0.ActionGroupCheckExecute(Sender: TObject);
var
vMark:TBookmark;
vState,BillList:string;
bNoChange:Boolean;
begin
if not QueryList.Active then Exit;
if not ActionCheck.Visible then Exit;
vMark:=QueryList.GetBookmark;
vState:=QueryList.FieldByname('State').AsString;
if vState='' then
vState:=DupeString('0',GV_StateLength);
if MessageDlg('确认要批量审核所选的单据吗?',mtConfirmation,mbOKCancel,0)<>mrOK then
Exit;
bNoChange:=False;PKList:='';BillList:='';
with QueryList do
begin
First;
while not Eof do
begin
vState:=FieldByName('state').AsString;
if (Copy(vState,1,1)<>'1') or (FieldByName('bSel').AsString<>'1') then //车间未确认或未选中 不操作
begin
bNoChange:=True;
Next;
Continue;
end;
PKList:=PKList+ Format(',''%s''',[FieldByName('PKID').AsString]);
BillList:=BillList+ Format(',%s',[FieldByName('BillNo').AsString]);
Next;
end;
if PKList='' then
begin
MessageDlg('没有发现要审核的单据!',mtInformation,[mbOK],0);
Exit;
end else
begin
PKList:=Copy(PKList,2,Length(PKList));
BillList:=Copy(BillList,2,Length(BillList));
end;
end;
end;
---------------------
我在DBGridEh增加一栏复选框及对应操作的解决方案的更多相关文章
- android 中单选和复选框监听操作
单选按钮RadioGroup.复选框CheckBox都有OnCheckedChangeListener事件,我们一起了解一下. package com.genwoxue.oncheckedchange ...
- Jquery对复选框CheckBox的操作
checkbox: 多选框 //获取选中值 checkbox:$("#checkbox_id").attr("value"): 多选框checkbox,打勾: ...
- jquery对复选框(checkbox)的操作(精华)
@{ Layout = null;} <!DOCTYPE html> <html><head> <meta name="viewport" ...
- 复选框批量删除操作-jquery方式
1.首先在页面添加一个批量删除的按钮:<li class="btns"><input id="deleteSubmit" class=&quo ...
- 【Telerik】实现列表单元格中添加复选框,进行状态(是、否)判断
前台界面: 需求:实现对每条细则是否必备进行判断,必备就勾选,否则不勾选. 首先:要保证列表GridView是可编辑的(IsReadOnly=false) 表格代码 其次:单元格的数据绑定要保证是双向 ...
- jQuery操作复选框的简单使用
开发中为了实现一个小功能,就是复选框的相互影响事件,如下图: 就是通过复选框设置权限,权限是分等级的,这是一个web管理系统的应用,一个管理员具有三个权限赋予,权限也是有等级的,其中删除和编辑权限相当 ...
- QTreeView/QTableView中利用QStandardItem实现复选框三种形态变化
https://www.techieliang.com/2017/12/729/ 原文地址 using_checkbox_item.h /** * @file using_checkbox_item. ...
- extjs 点击复选框在表格中增加相关信息行
功能效果:点击复选框在表格中自动增加相关信息行,复选框取消则表格中内容自动删除 初始效果大概是这样~~~~~ // 定义初始 存放表格数据 var gridItems = []; //省份复选框 va ...
- EasyUi datagrid列表增加复选框
本文为博主原创,未经允许不得转载 1.增加复选框列 { field: 'oid', title: '<input type=\"checkbox\" name ...
随机推荐
- Nginx 别名访问
#添加另一个域名,在浏览器中输入 etiantian.org,总是调到 www.etiantian.org server { listen 80; server_name w ...
- host.conf - 解析配置文件
DESCRIPTION (描述) 文件 /etc/host.conf 包含了为解析库声明的配置信息. 它应该每行含一个配置关键字, 其后跟着合适的配置信息. 系统识别的关键字有: order, tri ...
- 由n个已按1,2,3,.....,n编号的人围成一圈,从编号为1的人开始按1,2,3顺序循环报数,凡报到3者出圈,最后留一个人,问其编号是多少
/************************************************************************* > File Name: only_one. ...
- 【洛谷P4677】山区建小学
题目大意:给定一个长度为 N 的序列,现选出 M 个点组成一个集合,求这 N 个点到这个集合的最近距离的和是多少. 题解: 状态设计为 dp[i][j] 表示前 i 个点中选出 j 个点的最近距离和是 ...
- Shiro(一)
1 权限管理 1.1 什么是权限管理? 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问权限的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自 ...
- rsync+inotify实时数据同步多目录实战
rsync+inotify实时数据同步多目录实战 inotify配置是建立在rsync服务基础上的配置过程 操作系统 主机名 网卡eth0 默认网关 用途 root@58server1 1 ...
- CodeForces-437C(贪心)
链接: https://vjudge.net/problem/CodeForces-437C 题意: On Children's Day, the child got a toy from Delay ...
- CF718C Sasha and Array 线段树 + 矩阵乘法
有两个操作: 将 $[l,r]$所有数 + $x$ 求 $\sum_{i=l}^{r}fib(i)$ $n=m=10^5$ 直接求不好求,改成矩阵乘法的形式: $a_{i}=M^x\times ...
- BZOJ 4597: [Shoi2016]随机序列 线段树 + 思维
Description 你的面前有N个数排成一行.分别为A1, A2, … , An.你打算在每相邻的两个 Ai和 Ai+1 间都插入一个加号或者 减号或者乘号.那么一共有 3^(n-1) 种可能的表 ...
- Android处理未捕获的异常(应用全局异常)
public class CrashHandler implements UncaughtExceptionHandler { private static CrashHandler instance ...