我在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;
---------------------
最新文章
- C++Primer 第十五章
- JAVA 数组作业——动手动脑以及课后实验性问题
- 计算2的N次方
- 把数组转换成sql中能使用的字符串
- 【原】ComboBoxety用户输入自动匹配
- 解决SQL Server的TEXT、IMAGE类型字段的长度限制
- TaintDroid:智能手机监控实时隐私信息流跟踪系统(三)
- HDU 4381 Grid
- nyoj 寻找最大数
- selenium执行JavaScript语句:控制滚动条 聚焦元素 改变下拉选项
- Maven下载与环境变量配置
- IDEA修改module的名字
- 安装FreeIPA以及应用时报错汇总
- 使用pdfBox实现pdf转图片,解决中文方块乱码等问题
- 浏览器能正常访问的url,superagent不能正常访问
- 在C语言中除法运算为什么没有小数部分?
- Mybatis的cache
- An assembly specified in the application dependencies manifest
- Redis有序集内部实现原理分析
- GridEh Lookup
热门文章
- Qualcomm_Mobile_OpenCL.pdf 翻译-6-工作组尺寸的性能优化
- oracle高水位降低法
- exe 错误
- node模块管理
- &#39;gbk&#39; codec can&#39;t decode byte 0xad in position 12: illegal multibyte sequence
- Javascript高级程序设计第三版-笔记
- nginx typecho config
- week3 作业
- jdbcTemplate进行CRUD,查询结果转json
- npm安装源修改为淘宝源