2009-10-29 18 views
7

मेरे पास एक WPF डेटाग्रिड है जिसका उपयोग मैं कई स्तंभों के साथ कर रहा हूं। कॉलम में से एक में कुछ तत्व होते हैं जो कभी-कभी शून्य होते हैं और जब मैं इस कॉलम को आज़माता हूं और सॉर्ट करता हूं तो यह अपवाद का कारण बनता है।WPF डेटाग्रिड शून्य तत्वों के साथ कॉलम पर क्रमबद्ध करें

कालॅम की परिभाषा है कुछ की तरह:

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

अगर मैं प्रकार फ़ील्ड 1 स्तंभ पर यह ठीक है, अगर मैं प्रकार फ़ील्ड 2 स्तंभ पर और कोई रिक्त फ़ील्ड 2 वस्तुओं यह ठीक है देखते हैं, लेकिन कभी कभी वहाँ कर रहे हैं और डेटा ग्रिड उप क्षेत्र (मुझे लगता है) पर सॉर्ट करने के लिए कोशिश करता है और एक अशक्त अपवाद हिट:

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. 

मैं कोशिश की है SortMemberPath सेटिंग "MyObject.Field2.SubField" लेकिन निश्चित रूप से इस के बाद से समाधान नहीं होता है करने के लिए फील्ड 2 अभी भी कभी-कभी शून्य है। मैं एक कनवर्टर का उपयोग करने की कोशिश करने के बारे में सोच रहा था जहां मैंने सॉर्टमम्बरपैथ सेट किया था और उस कनवर्टर रिटर्न स्ट्रिंग.empty को किसी भी शून्य तत्वों के लिए वापस कर दिया लेकिन इसे काम नहीं कर सका।

मैंने इन स्तंभों के बाध्यकारी के भीतर "TargetNullValue = {x: स्टेटिक sys: String.Empty}" जोड़ने का भी प्रयास किया लेकिन यह अभी भी काम नहीं कर रहा है।

किसी भी सलाह/सुझाव की सराहना की जाएगी। धन्यवाद,

+1

आप यह सुनिश्चित कर सकते हैं कि कनवर्टर का उपयोग करके आपकी वस्तु कभी भी शून्य न हो या बस डेटाग्रिड के लिए डेटा प्राप्त करने पर इसे तुरंत चालू करें (यदि यह शून्य है)। –

उत्तर

9

सामान्य सलाह होगी: SortMemberPath का उपयोग न करें। न केवल उस समस्या के कारण जो आप अभी मिले हैं। लेकिन यह भी क्योंकि वे ultraslow हैं।

इसके बजाय ListCollectionView क्लास की कस्टमसॉर्ट प्रॉपर्टी का उपयोग करें। अधिक जानकारी के लिए "Improving Microsoft DataGrid CTP sorting performance" और "Improving Microsoft DataGrid CTP sorting performance - Part 2" पढ़ें। हालांकि यह "अपरिवर्तनीय प्रदर्शन" कहता है, यह भी दिखाता है कि आपकी समस्या को कैसे ठीक किया जाए।

उम्मीद है कि यह मदद करता है :)।

+0

धन्यवाद अंवाका, ग्रेट लिंक, मैंने उपरोक्त के रूप में कस्टम प्रकार को लागू किया है और यहां तक ​​कि मेरे ग्रिड में अपेक्षाकृत मामूली डेटा लोड के लिए सॉर्ट की गति काफी तेज है। एकमात्र नकारात्मक पक्ष यह है कि अब मैंने कई प्रकार के करने की क्षमता खो दी है क्योंकि किसी भी नए कस्टम सॉर्ट ने पिछले ओवरराइट को ओवरराइट किया है। मैं अब ऐसा करने का एक तरीका खोजने की कोशिश कर रहा हूं, एक नया सवाल हो सकता है! – WillH

+0

धन्यवाद, यह भी मेरी समस्या है! http://stackoverflow.com/questions/4086234/wpf-toolkit-datagrid-sorting-with-null-values – Falcon

संबंधित मुद्दे