Silverlight Datagrid数字排序

时间:2011-01-19 22:20:12

标签: silverlight sorting datagrid numeric

是否有更简单的方法可以正确排序数据网格中的数字数据?

说明 - 当您单击带有数据1,5,10,2的列标题时,它会将其排序为文本(1,10,2,5)。

我已经读过你可以实现ICollectionView,来创建自己的自定义排序。在我走这条路之前,我想确保没有更简单的方法。

2 个答案:

答案 0 :(得分:3)

一位同事解决了我的问题。通过将源对象包装在包装器中,您可以定义SortBLANK,它只返回数据而不是字符串。然后我使用SortMemberPath设置该调用的排序。请注意,这仅适用于仅数字排序的问题。

XAML(部分):

<sdk:DataGrid.Columns>
    <sdk:DataGridTextColumn Header="MAC" FontSize="12"  Binding="{Binding macaddr}" Width="100"/>
    <sdk:DataGridTextColumn Header="Upload Rate" SortMemberPath="SortUpload"  FontSize="12"  Binding="{Binding uploadRate}" Width="3*"/>
    <sdk:DataGridTextColumn Header="Download Rate" SortMemberPath="SortDownload" FontSize="12"  Binding="{Binding downloadRate}" Width="3*"/>
</sdk:DataGrid.Columns>

代码隐藏(部分):

public class OnlineDevicesWrapper
    {
        public string macaddr{get;set;}
        public string uploadRate { get; set; }
        public string downloadRate { get; set; }

        public int SortUpload
        {
            get
            {
                return int.Parse(uploadRate);
            }
        }

        public int SortDownload
        {
            get
            {
                return int.Parse(downloadRate);
            }
        }
    }

答案 1 :(得分:2)

您想要的是使用IComparer接口的自然字符串排序比较器。有几个C#解决方案,我列出了几个。请注意,我不认为它们中的任何一个都是专门针对Silverlight的,尽管在Silverlight中使用它们不会有太多麻烦。

How to achieve Natural(human alpha-numeric ) Sorting, for silverlight datagrids using ViewModel?

http://www.codeproject.com/KB/string/NaturalSortComparer.aspx

Natural Sort Order in C#

http://www.codeproject.com/KB/recipes/csnsort.aspx