2013-02-26 62 views
5

मेरे पास कस्टम सॉर्टिंग के साथ एक WPF डेटाग्रिड लागू है और यह ठीक काम करता है। मुझे संग्रह में कुछ रिकॉर्ड को ऊपर और नीचे (टॉप लॉक और नीचे लॉक) लॉक करने की आवश्यकता है। तो जब एक विशेष रिकॉर्ड शीर्ष लॉक होता है, तो चयनित कॉलम के लिए किसी भी मूल्य के बावजूद संग्रह में पहला रिकॉर्ड होना चाहिए (यानी मैं उन पंक्तियों को सॉर्ट नहीं करना चाहता जो शीर्ष लॉक और नीचे लॉक हैं)। यहां मेरी कस्टम सॉर्ट विधि है।कुछ रिकॉर्ड के साथ WPF DataGrid कस्टम सॉर्टिंग

private void PerformLineCustomSort(DataGridColumn column) 
     { 
      ListSortDirection direction = (column.SortDirection != ListSortDirection.Ascending) ? ListSortDirection.Ascending : ListSortDirection.Descending; 
      column.SortDirection = direction; 
      ListCollectionView listCollectionView = (ListCollectionView)CollectionViewSource.GetDefaultView(Lines); 

      LineSorter lineSort = new LineSorter(direction, column); 
      listCollectionView.CustomSort = lineSort; 

     } 

जहां LineSorterIComparer कार्यान्वयन के साथ अपने कस्टम सॉर्टर वर्ग है। यह ठीक काम करता है। अब मैं ListCollectionView पर शीर्ष लॉक और नीचे लॉक लागू करना चाहता हूं। मैंने उपरोक्त के साथ निम्नलिखित कोड का प्रयास किया है, लेकिन इसमें कोई बदलाव नहीं है (यानी सूची केवल कस्टम सॉर्ट कॉलम के आधार पर क्रमबद्ध है)।

listCollectionView.SortDescriptions.Add(new SortDescription("TopLock", ListSortDirection.Descending)); 
listCollectionView.SortDescriptions.Add(new SortDescription("BotLock", ListSortDirection.Ascending)); 

वहाँ किसी भी तरह से इस परिदृश्य करते हैं या मैं मैन्युअल रूप से दूर करने के लिए और उसके बाद बंद कर दिया रिकॉर्ड जोड़ने की आवश्यकता है है। कृपया सुझाव दें ..

+1

आप तीन अलग-अलग संग्रह बना सकते हैं और इसे संघ बना सकते हैं।एक संग्रह में शीर्ष लॉक होगा, दूसरे में नीचे ताला होगा और तीसरा संग्रह सभी तत्वों को आराम देगा। –

+3

अपने 'LineSorter.Compare() 'कार्यान्वयन को हमेशा अन्य वस्तुओं से कम होने के रूप में शीर्ष-लॉक किए गए आइटम को वापस करने के लिए, और नीचे की गई वस्तुओं को अन्य वस्तुओं से अधिक होने के रूप में बदलें। मुझे लगता है कि ऐसा कोई कारण है कि आप ऐसा नहीं कर सकते हैं? –

उत्तर

0

अच्छा। आप इसे अपने कोड से कर सकते हैं।

मान Let'a

The page size   = 10 

Current page   = 2 

Collection name  = myItems 

First Item to display = initialItem 

Last Item to display = lastItem 

कदम:

  • क्रमबद्ध संग्रह
  • संग्रह से 9 से 16 आइटम (8 आइटम) ले लो (क्योंकि आप कर रहे हैं दूसरे पृष्ठ में)

प्रारंभिक आइटम नंबर = 8 x (वर्तमान पृष्ठ संख्या -1) + 1 पिछले आइटम

संख्या = 8 x वर्तमान पृष्ठ संख्या

तो:

प्रारंभिक आइटम नंबर = 8 x (2 - 1) + 1 = 9

अंतिम आइटम नंबर = 8 x 2 = 16

  • उप संग्रह के शीर्ष करने के intialItem जोड़े

myItems.Insert (0, initialItem) (अब आप जो हल कर रहे हैं 8 मदों की एक subcollection है);

  • उप संग्रह

    myItems.Insert (9, lastItem) के अंत तक lastItem जोड़ें;