2009-10-29 19 views
7

Tengo una WPF Datagrid que estoy usando con varias columnas. Una de las columnas tiene algunos elementos que a veces son nulos y esto causa una excepción cuando intento ordenar esta columna.Clasificación WPF Datagrid en la columna con elementos nulos

Las definiciones de las columnas es algo así como:

<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> 

Si especie en la columna Campo1 Está bien, si una especie de columna Campo2 y no hay nula objetos Campo2 está bien, pero a veces hay y son la cuadrícula de datos intenta clasificar en el subcampo (supongo) y realiza un excepción nula:

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. 

he intentado fijar SortMemberPath a "MyObject.Field2.SubField" pero por supuesto esto no lo arregla desde Field2 todavía es a veces nulo. Me pregunté si trataría de usar un convertidor en el que estableciera SortMemberPath y que el convertidor devolviera string.empty para cualquier elemento nulo, pero no podría hacerlo funcionar.

También intenté agregar "TargetNullValue = {x: Static sys: String.Empty}" dentro del enlace de estas columnas, pero aún así no funcionó.

Cualquier consejo/sugerencia sería muy apreciada. Gracias, Voluntad

+1

Puede asegurarse de que su objeto nunca sea nulo mediante el uso de un convertidor o simplemente crear una instancia (si es nulo) cuando obtiene los datos para la cuadrícula de datos. –

Respuesta

9

El consejo general sería: No utilice SortMemberPath. No solo por el problema que acabas de conocer. Pero también porque son ultraslow.

En su lugar use la propiedad CustomSort de la clase ListCollectionView. Para más detalles, lea "Improving Microsoft DataGrid CTP sorting performance" y "Improving Microsoft DataGrid CTP sorting performance - Part 2". Aunque dice "rendimiento impor- tante", también muestra cómo solucionar su problema.

Espero que esto ayude :).

+0

Gracias Anvaka, Excelentes enlaces, he implementado el ordenamiento personalizado como el anterior e incluso para la carga de datos relativamente modesta en mi grilla, la velocidad de ordenación es notablemente más rápida. El único inconveniente es que he perdido la capacidad de hacer varios tipos ahora, ya que cualquier clasificación personalizada nueva sobrescribe la anterior. Estoy tratando de encontrar una manera de hacer esto ahora, ¡podría ser una nueva pregunta! – WillH

+0

gracias, ¡ese ha sido mi problema también! http://stackoverflow.com/questions/4086234/wpf-toolkit-datagrid-sorting-with-null-values – Falcon

Cuestiones relacionadas