2009-10-29 24 views
7

Ho un Datagrid WPF che sto usando con un numero di colonne. Una delle colonne ha alcuni elementi che a volte sono nulli e questo causa un'eccezione quando provo a ordinare su questa colonna.Ordinamento Datagrid WPF su colonna con elementi null

Le definizioni delle colonne è qualcosa di simile:

<dg:DataGrid.Columns> 
    <dg:DataGridTextColumn Binding="{Binding MyObject.Field1}" Header="Field1" Width="Auto" /> 
    <dg:DataGridTextColumn Binding="{Binding MyObject.Field2.SubField}" Header="Field2" Width="Auto" /> 
</dg:DataGrid.Columns> 

Se I sorta sulla colonna Field1 va bene, se mi sorta sulla colonna di Campo2 e non ci sono nulla Campo2 oggetti va bene, ma a volte ci sono e il DataGrid cerca di ordinare il sottocampo (credo) e colpisce un'eccezione null:

System.InvalidOperationException was unhandled 
    Message=The SortDescriptions added are not valid. The probable solutions are to set the CanUserSort on the Column to false, or to use SortMemberPath property on the Column, or to handle the Sorting event on DataGrid. 

ho provato a fissare SortMemberPath a "MyObject.Field2.SubField", ma naturalmente questo non risolvere il problema in quanto Field2 è ancora a volte nullo. Mi sono chiesto di provare a utilizzare un convertitore in cui ho impostato SortMemberPath e il convertitore restituisce string.empty per qualsiasi elemento nullo ma non è riuscito a farlo funzionare.

Ho anche provato ad aggiungere "TargetNullValue = {x: Static sys: String.Empty}" all'interno del binding di queste colonne ma ancora non ha funzionato.

Qualsiasi consiglio/suggerimento sarebbe più apprezzato. Grazie,

+1

Si può semplicemente assicurarsi che il proprio oggetto non sia mai nullo utilizzando un convertitore o semplicemente lo istanzia (se è nullo) quando si ottengono i dati per il datagrid. –

risposta

9

Il consiglio generale sarebbe: Non utilizzare SortMemberPath. Non solo per il problema che hai appena incontrato. Ma anche perché sono ultrasuoni.

Utilizzare invece la proprietà CustomSort della classe ListCollectionView. Per maggiori dettagli leggi "Improving Microsoft DataGrid CTP sorting performance" e "Improving Microsoft DataGrid CTP sorting performance - Part 2". Anche se dice "prestazioni imporve" mostra anche come risolvere il tuo problema.

Spero che questo aiuti :).

+0

Grazie Anvaka, Ottimi collegamenti, ho implementato l'ordinamento personalizzato come sopra e anche per il carico di dati relativamente modesto nella mia griglia la velocità di ordinamento è notevolmente più veloce. L'unico svantaggio è che ho perso la possibilità di fare più tipi ora poiché ogni nuovo ordinamento personalizzato sovrascrive il precedente. Sto cercando di trovare un modo per farlo ora, potrebbe essere una nuova domanda! – WillH

+0

grazie, anche questo è stato un mio problema! http://stackoverflow.com/questions/4086234/wpf-toolkit-datagrid-sorting-with-null-values – Falcon

Problemi correlati