找回密码
 立即注册

QQ登录

只需一步,快速开始

turboming

注册会员

16

主题

57

帖子

179

积分

注册会员

积分
179
turboming
注册会员   /  发表于:2019-10-15 17:19  /   查看:5766  /  回复:10
vb6升级到.net以后,同样是升序vb6把空值排到最后
.net把空值排到最前
请问.net可以实现和vb6一样的效果吗
[.net中sortRows排序的代码]
       Dim sortInfo1(0) As FarPoint.Win.Spread.SortInfo
       sortInfo1(0) = New FarPoint.Win.Spread.SortInfo(0, True, System.Collections.Comparer.Default)
       FpSpread1.Sheets(0).SortRows(0, FpSpread1.Sheets(0).RowCount, sortInfo1)

10 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-10-16 09:36:39
沙发
  1. sortInfo1(0) = New FarPoint.Win.Spread.SortInfo(0, True)
复制代码

不用加System.Collections.Comparer.Default,按照.net 的默认排序,空行会排在前面
回复 使用道具 举报
turboming
注册会员   /  发表于:2019-10-16 10:44:52
板凳
dexteryao 发表于 2019-10-16 09:36
不用加System.Collections.Comparer.Default,按照.net 的默认排序,空行会排在前面

好的,去掉了。确实空行会排在前面。
也就是说这地方升级以后无法实现和vb6一样的(空行排在后面)排序了。对吧
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-10-16 14:55:06
地板
去掉之后空行会排在后面,您那边去掉之后没有效果?
回复 使用道具 举报
turboming
注册会员   /  发表于:2019-10-16 16:45:09
5#
dexteryao 发表于 2019-10-16 14:55
去掉之后空行会排在后面,您那边去掉之后没有效果?

System.Collections.Comparer.Default去掉,.net 空行排在前面了。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-10-16 17:43:20
6#
本帖最后由 dexteryao 于 2019-10-16 17:45 编辑

您用的哪个版本,给我提供个Demo把,咱俩测试结果不太一样。补充一下如果单元格的值是空string  “”或者空格“ ” 是会参与排序的。如果您是这个原因,需要先将空值处理下。

image.png979969177.png
回复 使用道具 举报
turboming
注册会员   /  发表于:2019-10-16 19:43:13
7#
dexteryao 发表于 2019-10-16 17:43
您用的哪个版本,给我提供个Demo把,咱俩测试结果不太一样。补充一下如果单元格的值是空string  “”或者空 ...

是的,现在的情况就是单元格的值是空string“”。请问怎么处理呢?有什么好方法可以让单元格的值是空string“”的行排在前面呢?
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-10-17 09:25:55
8#
你可以自己实现一个IComparer的接口,用实现的接口替换System.Collections.Comparer.Default
参考https://docs.microsoft.com/en-us ... ew=netframework-4.8
或者您数据源把“”都替换成null
回复 使用道具 举报
turboming
注册会员   /  发表于:2019-10-17 15:58:49
9#
dexteryao 发表于 2019-10-17 09:25
你可以自己实现一个IComparer的接口,用实现的接口替换System.Collections.Comparer.Default
参考https:// ...

请问IComparer的接口有demo吗 数据都换成null有点麻烦
我试了一下换成null 好像不参与排序了呢- -升序降序单元格是空的都在最下面了
回复 使用道具 举报
turboming
注册会员   /  发表于:2019-10-18 11:23:21
10#
dexteryao 发表于 2019-10-17 09:25
你可以自己实现一个IComparer的接口,用实现的接口替换System.Collections.Comparer.Default
参考https:// ...

好了好了解决了
Public Class ReverserClass : Implements IComparer
        Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
               Implements IComparer.Compare
            If String.IsNullOrEmpty(x) And String.IsNullOrEmpty(y) Then
                Return 0
            End If
            If String.IsNullOrEmpty(x) Then
                Return 1
            End If
            If String.IsNullOrEmpty(y) Then
                Return -1
            End If
            Return New CaseInsensitiveComparer().Compare(x, y)

        End Function

    End Class
感谢

评分

参与人数 1金币 +300 收起 理由
dexteryao + 300

查看全部评分

回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部