代码之家  ›  专栏  ›  技术社区  ›  Eric

在Silverlight数据报中设置初始排序顺序?

  •  12
  • Eric  · 技术社区  · 16 年前

    当我第一次将数据加载到Silverlight DataGrid控件中时,如何使屏幕看起来与用户刚单击第一列的标题完全相同?换句话说,数据应该根据该列的值按升序排序,并且小排序箭头应该显示在第一列的标题中。

    假设这是可能的,我是否也可以让它看起来像是用户单击了第一列,然后shift单击了第二列?换句话说,我可以通过编程应用两部分排序,让屏幕看起来像是用户做的那样吗?

    5 回复  |  直到 16 年前
        1
  •  6
  •   Rammesses    15 年前

    我也需要这样做,并且仔细研究数据报是否可以这样做。

    实际上,DataGridColumnHeader类上有一个适当的方法,即InvokeProcessSort,但它是内部的,在DataGrid类中没有出现在任何其他地方。

    我所能做的就是在绑定数据之前对其进行预排序。我正在使用一个实现ICollectionView和ObservableCollection的自定义数据集合<>,这是正常的-但它不是最佳的,而且不一定需要大量的工作。

    另外,提供预先排序的集合意味着网格不显示排序标记。

    我将在DataGridBug跟踪器上提出这一问题-这是一个非常容易修复的主要遗漏-MS只需要在DataGridColumn和DataGrid类上公开适当的方法。

        2
  •  10
  •   Valentin    14 年前

    这是我的解决方案:

    if (pcv.CanSort == true)
    {
          pcv.SortDescriptions.Add(new SortDescription("ProductionStatus", ListSortDirection.Ascending));
          pcv.SortDescriptions.Add(new SortDescription("Date", ListSortDirection.Descending));
    }
    

    ,其中pcv是一个页面集合视图。这将首先按ProductionStates属性排序,然后按 日期属性。不过,它只显示第二列的小排序箭头。

        3
  •  4
  •   Matt Quinn    13 年前

    找到一篇保罗·谢里夫的好文章,帮我们解决了这个问题…

    http://weblogs.asp.net/psheriff/archive/2010/07/14/use-collectionviewsource-in-silverlight.aspx

    基本上,我们正在将数据报绑定到CollectionViewSource。结果发现它有一个collectionviewsource.sortDescriptions配置集,可以让我们指定默认的排序顺序。

    谢谢保罗!

        4
  •  1
  •   Jonathan Collins    11 年前

    只需将SortDescriptor添加到域数据源:

    <riaControls:DomainDataSource.SortDescriptors>
        <riaControls:SortDescriptor PropertyPath="ColumnName" Direction="Descending" />
    </riaControls:DomainDataSource.SortDescriptors>
    
        5
  •  0
  •   George Birbilis    10 年前

    Silverlight 3中存在CollectionViewSource+

    http://msdn.microsoft.com/en-us/library/system.windows.data.collectionviewsource(v=vs.95).aspx

    有一种简单的方法可以在XAML中定义默认排序顺序,如Microsoft建议的那样:

    使用CollectionViewSource在标记中声明排序

     <Window.Resources>
       <app:MyData x:Key="MyData"/>
       <CollectionViewSource x:Key="cvs" Source={StaticResource MyData}>
         <CollectionViewSource.SortDescriptions>
            <SortDescription Property="Name"/>
         </CollectionViewSource.SortDescriptions>
       </CollectionViewSource>
     </Window.Resources>
    
     <DataGrid ItemsSource="{Binding Source={StaticResource cvs}}"/> 
    

    在评论中找到 https://connect.microsoft.com/VisualStudio/feedback/details/678782/set-default-sort-order-of-datagrid

    我对微软样本的修正:

     <sort:SortDescription 
       PropertyName="Name"
       Direction="Ascending"
       xmlns:sort="clr-namespace:System.ComponentModel;assembly=System.Windows"
       />