2008-10-22 13 views
12

Cuando primero carga datos en un control Silverlight DataGrid, ¿cómo puedo hacer que la pantalla se vea exactamente como si el usuario acabara de hacer clic en el encabezado de la primera columna? En otras palabras, los datos deben ordenarse en orden ascendente de acuerdo con los valores de esa columna, Y la pequeña flecha de ordenación debe mostrarse en el encabezado de la primera columna.establece el orden de clasificación inicial en Silverlight DataGrid?

Suponiendo que sea posible, ¿puedo hacer que parezca que el usuario hizo clic en la primera columna y luego hacer clic con el botón en la segunda? En otras palabras, ¿puedo aplicar programáticamente un orden de dos partes y hacer que la pantalla se vea como si el usuario lo hubiera hecho?

Respuesta

6

Necesitaba hacer esto también, y miré con fuerza y ​​profundidad si el DataGrid podría hacer esto.

DE HAY DE hecho un método apropiado en la clase DataGridColumnHeader, es decir, InvokeProcessSort, pero es interno y no aparece en ninguna otra parte en las clases de DataGrid.

Todo lo que he podido hacer es ordenar previamente los datos justo antes de vincularlos. Estoy usando una recopilación de datos personalizada que implementa ICollectionView así como ObservableCollection <>, y esto funciona bien, pero no es óptimo, y una carga de trabajo que no necesariamente es necesaria.

Además, proporcionar una colección preordenada significa que la cuadrícula no muestra el marcador de clasificación.

Plantearé esto como un problema en el rastreador de errores de DataGrid; esta es una omisión bastante importante que sería bastante fácil de solucionar. MS solo necesita exponer los métodos apropiados en las clases DataGridColumn y DataGrid.

+0

Adivinar ninguna actualización sobre esto todavía? – Coops

10

Esta fue mi solución:

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

, en que el hematocrito es una PageCollectionView. Esto se clasifica primero por propiedad ProductionStatus y luego por Fecha propiedad. Sin embargo, muestra la pequeña flecha de ordenación solo para la segunda columna.

+0

Eso funcionó para mí también, ¡gracias! – Masha

+0

Creo que esto fue eliminado de Silverlight 4 –

+0

Lo usé con SL4, también. – Valentin

1

sólo tiene que añadir un SortDescriptor a la DomainDataSource:

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

Existe una CollectionViewSource en Silverlight 3+

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

Hay una manera sencilla de definir en XAML el orden predeterminado, según lo sugerido por Microsoft:

declarar la clasificación en el marcado utilizando 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}}"/> 

encontrar en los comentarios en https://connect.microsoft.com/VisualStudio/feedback/details/678782/set-default-sort-order-of-datagrid

Una corrección de la mina a la muestra de Microsoft:

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