找回密码
 立即注册

QQ登录

只需一步,快速开始

sxyweiren

中级会员

73

主题

366

帖子

755

积分

中级会员

积分
755

活字格认证微信认证勋章

sxyweiren
中级会员   /  发表于:2018-1-19 14:57  /   查看:4089  /  回复:6
现有一程序,旧程序是用的DenpyoMan做的。

移行到MR之后,想要控制数据区域的刷新。
因为旧程序通过Ctl.Redraw=False就可以让数据区域不刷新了。
但是MR的ResumeLayout并不能解决这个问题。

另:由于这块内容是通过循环来判断数据的整合性,用到了大量的共通函数,
所以通过修改逻辑来控制数据不刷新并不是一个简单的改修。

有没有好的方法,控制不刷新表示内容。

6 个回复

倒序浏览
robert
金牌服务用户   /  发表于:2018-1-25 17:01:43
沙发
默认情况下,刷新是异步的,循环操作数据不应该会导致频繁刷新。
不知道什么情况下会遇到频繁刷新的问题,是否可以上传一个工程文件来复现这个问题呢?
回复 使用道具 举报
sxyweiren
中级会员   /  发表于:2018-1-31 11:06:28
板凳
本帖最后由 sxyweiren 于 2018-1-31 11:08 编辑
robert 发表于 2018-1-25 17:01
默认情况下,刷新是异步的,循环操作数据不应该会导致频繁刷新。
不知道什么情况下会遇到频繁刷新的问题, ...

循环数据的同时,设定了CurrentCellPosition来移动单元格。
旧版的DenpyoMan里面用的是ActiveCellKey来移动。
因为涉及到的逻辑代码比较多,所以希望也是通过控制画面刷新来实现相同的效果。

大约有10000条数据的时候,如果每一条都涉及到跟DB里面的值作对比,就会看到数据一直在刷新。
但是DenpyoMan类似于Spread,只是滚动条在动,数据并没有刷新。
滚动条的刷新不刷新都不是问题,能不能数据区域不刷新?

回复 使用道具 举报
JeffryLI
葡萄城公司职员   /  发表于:2018-1-31 14:42:11
地板
sxyweiren 发表于 2018-1-31 11:06
循环数据的同时,设定了CurrentCellPosition来移动单元格。
旧版的DenpyoMan里面用的是ActiveCellKey来 ...

您好,类似中问题需要demo来验证重现您的问题,这样我们能产品人员才能帮您调查问题,谢谢。
请点击评分,对我5分评价,谢谢!

葡萄城控件服务团队
官方网站: https://www.grapecity.com.cn/developer
回复 使用道具 举报
sxyweiren
中级会员   /  发表于:2018-2-7 10:49:36
5#
JeffryLI 发表于 2018-1-31 14:42
您好,类似中问题需要demo来验证重现您的问题,这样我们能产品人员才能帮您调查问题,谢谢。

按照我的说明应该是可以做出Demo来的啊.
因为我现在公司的电脑处于保密隔离的开发间.
不能上网,不能以任何方式与外界通信,所以我很难提供Demo的.

1,创建一个MultiRow
2,五列一万行
3,Button压下,进行循环Check
    Mr.SuspendLayout
    for inci as integer =1 to 10000
      Mr.CurrentCellPosition = New CellPosition(inci-1,0)
      判断逻辑,随便写点去单元格的值的判断就行。
    Next
    Mr.ResumeLayout

跑起来后,就会发现单元格一直往下移动。

因为是盲打出来的,所以拼写方面可能有点问题。
反正就是这个思路。
回复 使用道具 举报
JeffryLI
葡萄城公司职员   /  发表于:2018-2-7 17:15:14
6#
sxyweiren 发表于 2018-2-7 10:49
按照我的说明应该是可以做出Demo来的啊.
因为我现在公司的电脑处于保密隔离的开发间.
不能上网,不能以 ...

好的,收到了,我和研发确认下,稍后给您回复。
请点击评分,对我5分评价,谢谢!

葡萄城控件服务团队
官方网站: https://www.grapecity.com.cn/developer
回复 使用道具 举报
JeffryLI
葡萄城公司职员   /  发表于:2018-2-7 18:15:25
7#
您好,刷新是滚动引起的,可以通过代码截止滚动,提高性能
        bool suspendRefresh = false;
        private void GcMultiRow_Scroll(object sender, ScrollEventArgs e)
        {
            if (suspendRefresh)
            {
                e.NewValue = e.OldValue;
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            suspendRefresh = true;
            for (int i = 0; i < 1000; i++)
            {
                g.CurrentCellPosition = new CellPosition(i, 0);
            }
            suspendRefresh = false;
        }
请点击评分,对我5分评价,谢谢!

葡萄城控件服务团队
官方网站: https://www.grapecity.com.cn/developer
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部