起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: xhong

【结贴】DataGrid光标问题

[复制链接]
发表于 2010-1-27 17:48:39 | 显示全部楼层
楼主,你这样每次选中或者取消一下,都整个数据集循环,当数据量大会影响性能的,
楼主,你的分组字段固定吗?一级分组还是多级的,我们看看是否有比较好的实现方法
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-28 08:37:17 | 显示全部楼层
分组字段是固定的 只有一级分组 我们现在尝试的办法的 克隆游标集 字段改变的时候循环游标集计算数据 但是问题是触发数据改变的时候 原始数据集没有POST 克隆出来的数据是没POST之前的数据 比如字段A选中后 在光标指向下一行的时候 触发字段改变事件 克隆游标集 这时候数据集没哟POST  克隆出来的数据集的字段值还是0 未选中状态 如果克隆之前主动post原始数据集 就是不断的触发字段改变事件 造成堆栈溢出
回复 支持 反对

使用道具 举报

发表于 2010-1-28 09:40:12 | 显示全部楼层
在post中取消字段的改变事件试试看。
另外,楼主看看是否可以通过主从来表现,主数据集,distinc 一下分组字段
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-28 14:11:24 | 显示全部楼层
什么叫在POST中取消字段的改变属性?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-28 14:12:30 | 显示全部楼层
什么叫在POST 中取消字段的改变事件 ?
回复 支持 反对

使用道具 举报

发表于 2010-1-28 14:36:52 | 显示全部楼层
就是设置 DataChange 为空,参考代码
dsDataSet.DataSet.OnDataSetChange := nil;

等post后,再加上
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-28 14:48:58 | 显示全部楼层
if Field<>nil then
    begin
        if Field.FieldName='XZ' then
        begin
            DataSetBroker1.DataSet.OnDataSetChange:=nil;
            DataSetBroker1.DataSet.Post;
            test();
        end;
    end;
Post之后还是会继续执行字段改变事件,执行不到test() 直到溢出
回复 支持 反对

使用道具 举报

发表于 2010-1-28 15:59:01 | 显示全部楼层
楼主,那你放到字段的离开事件上去做吧。
在业务信息的数据集的字段编辑器上加载该字段,然后在字段的onExit事件上实现
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-28 16:09:37 | 显示全部楼层
这个计算过程现在可以解决了 但是即使是克隆了游标集 数据计算是滚动游标集  但是当一组的数据大过一个docview的时候 光标还是会跳 必须使组头露出 光标才正确 组头一旦因为滚动没隐藏起来 光标就要乱跳 你可以重现一下效果 现在还是无法解决光标乱跳的问题
回复 支持 反对

使用道具 举报

发表于 2010-1-28 17:16:47 | 显示全部楼层
那没有好的方法了,要不搞主从吧
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-13 06:46 , Processed in 0.042455 second(s), 14 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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