找回密码
 立即注册

QQ登录

只需一步,快速开始

afei_liuge
金牌服务用户   /  发表于:2023-9-14 16:43  /   查看:1471  /  回复:7
1金币
使用  fpSpread.ActiveSheet.SortRange 方法 进行排序时,响应速度非常慢,100行数据 需要1秒多钟, 如果是ID列 时间会更久。 。

最佳答案

查看完整内容

和你微信沟通了一下,实际的需求是整个sheet整体多列排序,那么直接进通过表头排序就行,表头也是支持多列排序的,没必要使用区域排序。 按照你的性能需求,SortRange耗时肯定是没法满足的

7 个回复

倒序浏览
最佳答案
最佳答案
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-9-14 16:43:15
来自 6#
和你微信沟通了一下,实际的需求是整个sheet整体多列排序,那么直接进通过表头排序就行,表头也是支持多列排序的,没必要使用区域排序。

按照你的性能需求,SortRange耗时肯定是没法满足的
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-9-14 19:05:28
2#
正常100行的数据不会有这个问题

从此前你这边提到几个帖子问题来看,都和绑定的数据,以及做的一些设置有关系,所以还是得你发一个demo上来,或者给出明确的重现问题的方法
回复 使用道具 举报
afei_liuge
金牌服务用户   /  发表于:2023-9-14 19:08:44
3#
Richard.Ma 发表于 2023-9-14 19:05
正常100行的数据不会有这个问题

从此前你这边提到几个帖子问题来看,都和绑定的数据,以及做的一些设置 ...

FarPoint.Win.Spread.SortInfo[] sorts = new FarPoint.Win.Spread.SortInfo[this.fpSpread.ActiveSheet.ColumnCount];
                for (int i = 0; i < this.fpSpread.ActiveSheet.Columns.Count; i++)
                {
                    if (item.Key == this.fpSpread.ActiveSheet.Columns.Label)
                    {
                        if (item.Value == OrderByType.Desc)
                        {
                            this.fpSpread.ActiveSheet.Columns.SortIndicator = FarPoint.Win.Spread.Model.SortIndicator.Descending;
                            sorts = new FarPoint.Win.Spread.SortInfo(i, false);
                        }
                        else
                        {
                            this.fpSpread.ActiveSheet.Columns.SortIndicator = FarPoint.Win.Spread.Model.SortIndicator.Ascending;
                            sorts = new FarPoint.Win.Spread.SortInfo(i, true);
                        }

                        break;
                    }
                }

                this.fpSpread.ActiveSheet.SortRange(0, 0, this.fpSpread.ActiveSheet.RowCount, this.fpSpread.ActiveSheet.ColumnCount, true, sorts);
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-9-15 14:13:39
4#
测试1000行大概用时300ms
WinFormsNET6Test.zip (422 KB, 下载次数: 82)
回复 使用道具 举报
afei_liuge
金牌服务用户   /  发表于:2023-9-15 17:14:41
5#
Richard.Ma 发表于 2023-9-15 14:13
测试1000行大概用时300ms

选择的列数据大都一样,数据要有不一样的试试。字符串类型的性能马上就体现出来了。
回复 使用道具 举报
afei_liuge
金牌服务用户   /  发表于:2023-10-10 14:58:37
7#
Richard.Ma 发表于 2023-9-14 16:43
和你微信沟通了一下,实际的需求是整个sheet整体多列排序,那么直接进通过表头排序就行,表头也是支持多列 ...

表头只能单列排序,当点击一列头排序时,只会针对此排序。 不支持点击的所有列者进行排序。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-10-10 18:13:57
8#

每次的排序都是以该列为依据,整行排序的,而排序结果实际都会保留。所以这里说的支持多列排序也是基于此
比如AB两列。先对B列倒序排序,然后再对A列倒序或者顺序排序。此时B列始终还是倒序(即是先按照A列排序,再按照B列排序)
更多列的话也是一样的。比如按照顺序对A,B,C列点击进行倒序排序。那么最后的排序结果就是先对C倒序,然后对B倒序,然后对A倒序


test.gif581860351.png
test.gif477083739.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部