首页 > 其他 > 详细

设置表格可编辑性问题

时间:2016-03-17 12:50:29      阅读:250      评论:0      收藏:0      [点我收藏+]

我昨天解决了一个田工分配给我的任务,名称是“为新单据基类增加选项设置界面”。晓莉在我提交了源代码之后,迅速编译了源代码,随后又并发布了编译制品。今天在现场的周春泽老师在测试这个功能时,发现一个问题:他无法编辑表格中的内容。他把这个问题报告给晓莉。晓莉随后把这个问题转达给了我。我刚听到这个问题的描述时,认定这是由于晓莉没有在数据库中增加特殊权限导致的,于是没把它放在心上,自顾自睡起觉来。晓莉去找到田工,让他帮忙排查问题。我一觉醒来,问田工:“问题解决了吗?”田工说:“解决了。错误原因是由于程序读取了FAUSERGRID表中内容,只要将这个表中的某条记录删除问题就解决了。”我一想,觉得不对,于是来到田工身旁,告诉他把示例1中的代码改写成示例2的样子,问题就应该能得到解决了。

示例1

procedure TfrmPSBillBaseDtl2SetOptions.FormShow(Sender: TObject);
begin
  Caption := FModuleName + ‘-选项设置‘;
  pgcOptions.ActivePageIndex := 0;
  LoadOptions;
  ResetRight;
  Grid_Storage.GridSettingLoadFromDB(gblobj.Emp_GID, Format(‘%s_%d‘, [Self.Name, FModuleNo]), GridEditable, qry);
  Grid_Storage.GridSettingLoadFromDB(gblobj.Emp_GID, Format(‘%s_%d‘, [Self.Name, FModuleNo]), GridReadOnly, qry);
end;

示例2

procedure TfrmPSBillBaseDtl2SetOptions.FormShow(Sender: TObject);
begin
  Caption := FModuleName + ‘-选项设置‘;
  pgcOptions.ActivePageIndex := 0;
  LoadOptions;
  Grid_Storage.GridSettingLoadFromDB(gblobj.Emp_GID, Format(‘%s_%d‘, [Self.Name, FModuleNo]), GridEditable, qry);
  Grid_Storage.GridSettingLoadFromDB(gblobj.Emp_GID, Format(‘%s_%d‘, [Self.Name, FModuleNo]), GridReadOnly, qry);
  ResetRight;
end;

ResetRight方法会设置表格列的可编辑性;Grid_Storage.GridSettingLoadFromDB方法也会,但同时它还具有设置表格的其他属性的功能。ResetRight方法设置表格列的可编辑写时,依据的是用户对于表格的特殊权限;Grid_Storage.GridSettingLoadFromDB方法则依据用户上一次关闭选项设置界面时的表格设置(是一种记忆功能)。这两个方法在设置表格列的可编辑性方面,其功能是重复的,当连续调用这两个方法时,后调用的方法对表格的作用会覆盖先调用的方法。

根据以上列举的两种方法的特性,可以猜想当时周总遇到错误时,系统中到底发生了什么。当周总第一次打开选项设置界面时,他没有为自己添加表格的特殊权限。这时,系统会按顺序连续执行下列示例3中的几行代码。

示例3

ResetRight;
Grid_Storage.GridSettingLoadFromDB(gblobj.Emp_GID, Format(‘%s_%d‘, [Self.Name, FModuleNo]), GridEditable, qry);
Grid_Storage.GridSettingLoadFromDB(gblobj.Emp_GID, Format(‘%s_%d‘, [Self.Name, FModuleNo]), GridReadOnly, qry);

由于此时周总既没有特殊权限(导致ResetRight方法将表格设置为不可编辑),也没有前一次关闭选项设置界面的经历(导致Grid_Storage.GridSettingLoadFromDB方法读取不到上一次关闭时表格的设置信息,因此没有做任何事),于是程序按照ResetRight方法的设置,将表格设置为了不可编辑。

这时周总将选项设置界面关闭,随后打开员工资料维护模块,为自己勾选了表格的特殊权限,然后重新打开选项设置界面。这时,系统按顺序执行示例3中的几行代码。它先执行ResetRight方法。由于用户已经拥有了特殊权限,因此该方法将表格设置为可编辑。随后系统执行Grid_Storage.GridSettingLoadFromDB方法。由于周总上一次离开选项设置界面时,表格的状态是不可编辑,于是,该方法根据记忆,将表格设置为了不可编辑。实际上,表格的可编辑性,应该只依赖于用户当前所拥有的特殊权限,因而ResetRight方法永远应该写在Grid_Storage.GridSettingLoadFromDB方法之后。

总之,只需要将代码从示例1的格式改写成示例2的格式,就可以解决周总遇到的问题。这是一个确定的代码的bug,跟FAUSERGRID没有丝毫关系。

设置表格可编辑性问题

原文:http://www.cnblogs.com/zhu-jie/p/5286592.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!