找回密码
 立即注册

QQ登录

只需一步,快速开始

FBAccount

中级会员

21

主题

73

帖子

701

积分

中级会员

积分
701

活字格认证

FBAccount
中级会员   /  发表于:2014-11-6 14:53  /   查看:11624  /  回复:12
您好,想请教使用C1FlexGrid时,使用自定义的UserControl,且为使用下图方式添加,


产生后的FlexGrid如下~~


目前填入数据大概是一个分页要800笔,在这个状况下拖曳卷轴速度超级慢,整个会卡住,但若是纯文本则速度是可以接受的,请问是否有办法改善,是否有可以参考的方式

自定义的UserControl几乎都是标准的WPF,像是按钮,图中唯一较不同的是有用到C1NumbericBox
谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

12 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2014-11-6 16:33:00
沙发
回复 1楼FBAccount的帖子

你好,首先我要重现你说的速度慢的问题,然后根据具体问题来提供解决方案。
如下是我在本机的测试步骤,和你确认下:
1.继承CellFactory
2.重写CreateCellContent方法。
3.C1FlexGrid的CellFactory使用自定义的CellFactory。
4.C1FlexGrid创建800行数据。
5.运行,并在运行时拖拽Scrollbar。

结果:目前,我这里的测试结果没有出现慢的问题。
我的测试版本是C1 wpf 2014 v2。
我的测试Demo如下:



如果在测试步骤上或是版本上会有差别,还请指出。
若是能够提供出现问题的Demo,我们可以更快速的帮助你发现问题所在。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
FBAccount
中级会员   /  发表于:2014-11-6 17:54:00
板凳
感谢响应,目前测试你给我的Demo Sample后,我们比较能够厘清我们的问题点。
1.        画面呈现的数据在10笔左右时,速度是可以接受的,但是基本上一次运行40笔可见数据时,慢的情况就越来越严重了
2.        填入C1NumericBox时影响更慢了一点

就逻辑来看,似乎是拖拽Scroll Bar时不断CreateCellContent里new Class,且当class越复杂时自然影响到速度这部分

举例您的范例来说左半部文字为主的部分,拖拉速度就很快、右半部分图形等就会慢许多
有什么撰写方法可以提升该速度呢?看看能否就以填入C1NumericBox为例

[运行版本与您相同]
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-11-6 18:42:00
地板
回复 3楼FBAccount的帖子

结合你的需求,对Demo重新做了验证。
修改createcell的类型为C1NumericBox,然后数据同上面的Demo。
这种情况下,速度会比单纯TextBox慢。

WPF平台下绘制的时候会耗损性能,这是这个平台下的限制,而且还要加载类型,就会导致如上你说的问题。

因此我们有一种滚动的方式,用来解决此类问题。代码参考:
C1FlexGrid.DeferScrolling =  DeferScrolling.DeferBoth;
在这种模式下,鼠标Down下,拖拽Scrollbar的时候不会滚动,当鼠标up,就会快速完成Scroll。
你可以尝试这种方式。

评分

参与人数 1满意度 +5 收起 理由
FBAccount + 5 感谢版主,目前似乎只能够这样做,谢谢

查看全部评分

请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
FBAccount
中级会员   /  发表于:2014-11-11 11:01:00
5#
版主你好,想请问是否还有其他选项与方法可行~
目前Flexgrid采用CreateCellContent,将画面上可视部分进行对象处理,请问是否有 选项 或方法 可以在起始时就把我要的对象建立好,不然超出可视范围后就会进行CreateCellContent,不断进行new Class的动作,一来一往导致效率低落

CreateCellContent是会连ReSize都触发,有方法可以让我们控制为,我等想要他更新画面时才触发吗?

以版主的范例程序为例,我多加一栏用以C1NumberBox,建立100笔数据,画面呈现15笔数据,在此等状况下卷轴拖拽就会慢了,PageDown稍快,但倘若当一个Cell里面具有C1Number且具有多个按钮,其效率可想而知,烦请协助



题外话,请教C1NumberBox其输入数字部分可否呈现文字呢? 就是其Value仍为数字,但Display为文字~


例如说 0~100为数字,但倘若 Value 为 -1,原本呈现-1的地方呈现「负数」二字类似的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-11-11 14:06:00
6#
回复 5楼FBAccount的帖子

1.对于CreateCellContent这个问题,我需要研究下才能给你回复。
2.可以呈现文字,你只要重写一个类继承C1NumericBox,并重写OnApplyTemplate,更改模板,并调用TextChanged事件。代码参考:
  1. public class MyNumericBox:C1.WPF.C1NumericBox
  2.     {        
  3.         public override void OnApplyTemplate()
  4.         {
  5.             base.OnApplyTemplate();

  6.             var element= GetTemplateChild("Text");
  7.             (element as C1.WPF.C1TextBoxBase).TextChanged += new TextChangedEventHandler(MyNumericBox_TextChanged);
  8.         }

  9.         void MyNumericBox_TextChanged(object sender, TextChangedEventArgs e)
  10.        {
  11.            double value;
  12.            if (double.TryParse(((System.Windows.Controls.TextBox)(e.OriginalSource)).Text, out value))
  13.            {
  14.                if (value < 0)
  15.                    ((C1.WPF.C1TextBoxBase)(e.OriginalSource)).C1Text = "负数 ";
  16.            }
  17.             
  18.         }
  19.     }
复制代码
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-11-12 10:22:00
7#
回复 5楼FBAccount的帖子

很抱歉给你带来的不便,就目前的研究来看,无法控件刷新的时机。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
FBAccount
中级会员   /  发表于:2014-11-12 17:27:00
8#
回复 5楼FBAccount的帖子

很抱歉给你带来的不便,就目前的研究来看,无法控件刷新的时机。
Alice 发表于 2014-11-12 10:22:00


感谢研究,目前我采Queue 与 Task 做异步更新,虽然效果不彰,但稍微解决不这么卡住的问题,不过若控件复杂则呈现效果也不好,若能有SourceCode能给予修改,将是再好不过的了~

又要再问个题外话,请问C1NumberBox 有办法在用户按下向上或是向下键时(仍未加减),收到该事件进行处理吗?

我GetTemplateChild("Increase") 与 Decrease,并做将Click Event丢出来,但是该值是被Increment过的,想接收 Increment之前的值,Increment多少我动态自行控制这样

目前需求是鼠标滚轮上下滚,键盘向上、向下按以及鼠标点击Increase、Decrease RepeatButton 时,进行Increment,而Increment的值为我自行控制,所以需要在加减之前拦截到,请问是有哪个事件可以在值被变更前拦截到吗?

另外问一下这问题是否要另开新帖呢?
感谢
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-11-13 12:12:00
9#
回复 8楼FBAccount的帖子

这个不用了,不过建议下次新问题开新帖,以便你查阅,也方便我们管理。

根据你的需求,你的所有操作都是对值的操作, 你可以尝试C1NumericBox的ValueChanged事件。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
FBAccount
中级会员   /  发表于:2014-11-14 17:38:00
10#
请教一下,C1DataGrid也会有相同的问题吗??
且C1DataGrid有一个ScrollPreviewRowTemplate,请问FlexGrid有类似的作法吗?

C1NumberBox的问题我就不再此帖问了,目前我的需求部分皆完成了,最后针对Click、PreviewKeyDown、MouseWheel等皆动手脚,感谢协助
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部