起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 511|回复: 12

【结】[请求]关于DataGrid中CheckBox单选问题!

[复制链接]
发表于 2010-5-6 16:08:19 | 显示全部楼层 |阅读模式
我想在“最高学历”字段,实现单选。请问有什么好的办法吗?
特别是在DataSet.Insert状态下,实现单选。

未命名.jpg

13.44 KB, 下载次数: 214

回复

使用道具 举报

发表于 2010-5-6 16:28:35 | 显示全部楼层
没有太理解,你的意思,不管当前数据集有多少条记录,只能有一条记录可以选中这个复选框,是这样吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-5-6 16:32:01 | 显示全部楼层
是啊!
            {j := 0;
            k := EmpEduDataSet.RecNo;
               if EmpEduDataSet.IsEmpty then exit ;
                     EmpEduDataSet.First;
                     for  i:= 0 to (EmpEduDataSet.RecordCount -1) do
                        begin
                          if EmpEduDataSet.FieldByName('TopEducation').AsString = 'True' then
                             begin
                               j := j + 1;
                             end;
                           EmpEduDataSet.Next;
                        end;
         if j = 0 then
            begin
              jsDialogs.ShowWarning('请选择一个最高学历', '');
              EmpEduDataSet.Edit;
              EmpEduDataSet.RecNo := K;
            end;
         if J = 1 then
            begin
              EmpEduDataSet.Edit;
              EmpEduDataSet.Post;
              EmpEduDataSet.RecNo := K;
            end;
         if j >= 2 then
            begin
              jsDialogs.ShowWarning('只能选择一个最高学历', '');
              EmpEduDataSet.RecNo := K;
              EmpEduDataSet.Edit;
              EmpEduDataSet.FieldByName('TopEducation').AsString := 'False';
              EmpEduDataSet.Post
            end;  }
我写了些代码!但是在新增时候,k := EmpEduDataSet.RecNo行不通啊!
回复 支持 反对

使用道具 举报

发表于 2010-5-6 18:02:20 | 显示全部楼层
你的代码写在哪里了?
写到beforeapplyupdates里面看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-5-6 18:14:05 | 显示全部楼层
DataNavigatorBeforeAction里面写的,当BizActnConsts.ActionDataSetSave(保存)时候触发。
主要是在插入新数据时候k := EmpEduDataSet.RecNo不行!
回复 支持 反对

使用道具 举报

发表于 2010-5-7 09:30:28 | 显示全部楼层
为什么要k := EmpEduDataSet.RecNo这样?
你直接循环一下数据集不久行了么?
              if EmpEduDataSet.IsEmpty then exit ;
                     EmpEduDataSet.First;
                     for  i:= 0 to (EmpEduDataSet.RecordCount -1) do
                        begin
                          if EmpEduDataSet.FieldByName('TopEducation').AsString = 'True' then
                             begin
                               j := j + 1;
                             end;
                           EmpEduDataSet.Next;
                        end;
就这一段,然后判断J的值
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-5-7 09:58:42 | 显示全部楼层
当数据多的时候,要把光标指回到新建数据。或者被修改的数据啊!
回复 支持 反对

使用道具 举报

发表于 2010-5-7 11:20:14 | 显示全部楼层
用数据集的bookmark试试。
回复 支持 反对

使用道具 举报

发表于 2010-5-7 11:34:55 | 显示全部楼层
我问一下,
1、你在何时要做这个检查,是向后台提交数据的时候,还是记录滚动或者说post本地提交的时候,还是新增记录的时候,还是...
2、打开数据集的时候,界面上有记录吗?是空的,还是有?如果有,那么取出来的记录中是否就会已经存在有超过一条记录已经选中了呢?如果有,咋办?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-5-7 22:38:09 | 显示全部楼层
atiger 大哥,问的我都无语了,可以按照你的思路给我个参考吗?谢谢啊!哈哈!
我写的这个是在BizActnConsts.ActionDataSetSave时候做检查,把数据Post 到本地,判断依据是整个数据集里'最高学历'这个字段,所有数据集数据,只有一个'True',则向后台提交,否则报错!
我用存储过程能实现这个操作。
if (Select count(*) From Emp_Edu where EmpGuid = @EmpGuid and EmpID = @EmpID and TopEdu = 'True') <> 1 then
begin //“只允许有一个最高学历”
@ErrorID = -10;
@ErrorMsg = '只允许有一个最高学历';
......
end;

update...
//我大概写下存储。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-8 22:30 , Processed in 0.044012 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表