2009-10-29 13 views
7

複数の列で使用しているWPF Datagridがあります。列の1つにいくつかの要素があり、これがnullの場合があります。この列で並べ替えると例外が発生します。 Iソートフィールド2列にし、フィールド2が時々あり、それは結構ですオブジェクトが、ヌルが存在しない場合、私は、ソートフィールド1列に、それは、罰金の場合WPF Datagridの列がnullの要素を持つ列に並べ替えます。

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

列の定義のようなものですで、DataGridがサブフィールド(私は推測)をソートしようとヌル例外ヒット:

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. 

私が試してみました「MyObject.Field2.SubField」はもちろん、これはので、それを修正しないためにSortMemberPathを設定しますField2はまだ時々nullです。私は、SortMemberPathを設定してコンバータにstring要素を返すstring.emptyを返すようにしましたが、動作させることができませんでした。

Iはまた、追加しようとした「TargetNullValueは= {X:静的SYS:String.Emptyを}を」これらの列の結合内でそれはまだ動作しませんでした。

どのようなアドバイスや提案をいただければ幸いです。 ありがとう、 Will

+1

あなたは自分のオブジェクトは、コンバータを使用して、ヌルになることはありませんことを確認したり(それがnullの場合)には、データグリッドのデータを取得するときにそれをインスタンス化することができます。 –

答えて

9

一般的なアドバイスは:SortMemberPathを使用しないでください。だけでなく、あなたが直面している問題のために。しかし、彼らは超低速でもあるからです。

代わりに、ListCollectionViewクラスのCustomSortプロパティを使用します。詳細は"Improving Microsoft DataGrid CTP sorting performance""Improving Microsoft DataGrid CTP sorting performance - Part 2"をご覧ください。 「パフォーマンスを悪化させる」と言われていますが、問題を解決する方法も示しています。

希望:これは役に立ちます:)。

+0

おかげAnvaka、 グレートリンクは、私は、並べ替え、上記のようにカスタムを実装しているとも、私のグリッドでは比較的控えめなデータロードのソート速度が著しく速くなります。唯一の欠点は、新しいカスタムソートが以前のものを上書きするので、今は複数のソートを行う能力を失ったことです。私は今これを行う方法を見つけることを試みている、新しい質問になる可能性があります! – WillH

+0

ありがとう、それも私の問題でした! http://stackoverflow.com/questions/4086234/wpf-toolkit-datagrid-sorting-with-null-values – Falcon

関連する問題