установить начальный порядок сортировки в Silverlight DataGrid?

StackOverflow https://stackoverflow.com/questions/226433

  •  03-07-2019
  •  | 
  •  

Вопрос

Когда я впервые загружаю данные в элемент управления Silverlight DataGrid, как я могу сделать экран точно таким же, как если бы пользователь только что щелкнул заголовок первого столбца? Другими словами, данные должны быть отсортированы в порядке возрастания в соответствии со значениями этого столбца, И маленькая стрелка сортировки должна отображаться в заголовке первого столбца.

Предполагая, что это возможно, могу ли я сделать так, чтобы пользователь щелкнул первый столбец, а затем щелкнул по второму? Другими словами, могу ли я программно применить сортировку из двух частей, чтобы экран выглядел так, как будто это сделал пользователь?

Это было полезно?

Решение

Мне тоже нужно было это сделать, и я тщательно и тщательно изучил, может ли DataGrid сделать это.

На самом деле в классе DataGridColumnHeader есть соответствующий метод, а именно InvokeProcessSort, но он внутренний и не обнаружен где-либо еще в классах DataGrid.

Все, что мне удалось сделать, - это предварительно отсортировать данные непосредственно перед их привязкой. Я использую пользовательский сбор данных, который реализует ICollectionView, а также ObservableCollection & Lt; & Gt;, и это работает хорошо - но это не оптимально, и нагрузка на работу не обязательна.

Кроме того, предоставление предварительно отсортированной коллекции означает, что сетка не показывает маркер сортировки.

Я расскажу об этом как о проблеме с отслеживателем ошибок DataGrid - это довольно серьезное упущение, которое было бы довольно легко исправить - MS просто нужно предоставить соответствующие методы для классов DataGridColumn и DataGrid.

Другие советы

Это было мое решение:

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

, где pcv - это PageCollectionView. Это сортируется сначала по свойству ProductionStatus, а затем по Дата собственности. Она отображает маленькую стрелку сортировки только для второго столбца.

Нашел хорошую небольшую статью Пола Шеррифа, которая решила это для нас ...

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

По сути, мы все равно привязывали DataGrid к CollectionViewSource. Оказывается, у этого есть набор конфигурации CollectionViewSource.SortDescription, который позволяет нам определять порядок сортировки по умолчанию.

Спасибо, Пол!

Просто добавьте SortDescriptor в DomainDataSource:

<riaControls:DomainDataSource.SortDescriptors>
    <riaControls:SortDescriptor PropertyPath="ColumnName" Direction="Descending" />
</riaControls:DomainDataSource.SortDescriptors>

В 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

Моя поправка к примеру Microsoft:

 <sort:SortDescription 
   PropertyName="Name"
   Direction="Ascending"
   xmlns:sort="clr-namespace:System.ComponentModel;assembly=System.Windows"
   /> 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top