2009-05-05 11 views
19

मैं PropertyGrid में श्रेणियों की सॉर्टिंग को कैसे अनुकूलित कर सकता हूं?मैं PropertyGrid पर श्रेणी सॉर्टिंग को कैसे अनुकूलित कर सकता हूं?

मैं निम्न में से या तो ...

propertyGrid.PropertySort = PropertySort.Categorized; 
propertyGrid.PropertySort = PropertySort.CategorizedAlphabetical; 

... तो श्रेणियों alphabetized हो जाएगा सेट करते हैं। ("वर्णमाला" प्रत्येक श्रेणी के भीतर गुणों पर लागू प्रतीत होता है।) यदि मैं PropertySort.NoSort का उपयोग करता हूं, तो मैं वर्गीकरण खो देता हूं।

मैं पॉप्युलेट कर रहा हूँ मेरी PropertyGridSelectObject है, जो बहुत आसान है के साथ:

[CategoryAttribute("Category Title"), 
    DisplayName("Property Name"), 
    Browsable(true), 
    ReadOnly(false), 
    BindableAttribute(true), 
    DesignOnly(false), 
    DescriptionAttribute("...")] 
    public bool PropertyName { 
     get { 
      // ... 
     } 

     set { 
      // ... 
      this.OnPropertyChanged("PropertyName"); 
     } 
    } 

मैं कुछ दर्जन गुण होते हैं:

this.propertyGrid1.SelectedObject = options; 

options उपयुक्त रूप से सजाया गुणों के साथ एक वर्ग का एक उदाहरण है आधे दर्जन श्रेणियों में।

क्या SelectedObject के साथ उपयोग की आसानी को संरक्षित करते हुए मैं श्रेणी क्रम क्रम समायोजित कर सकता हूं?

+0

इस आलेख पर एक नज़र डालें [कोडप्रोजेक्ट: संपत्ति ग्रिड में ऑर्डरिंग आइटम] (http://www.codeproject.com/Articles/6611/Ordering-Items-in-the-Property-Grid)। –

उत्तर

4

यदि आप का मतलब है कि आप श्रेणियों को एक विशिष्ट (गैर-वर्णानुक्रम) तरीके से क्रमबद्ध करना चाहते हैं, तो नहीं - मुझे नहीं लगता कि आप ऐसा कर सकते हैं। आप VisualHint आज़मा सकते हैं - मुझे उम्मीद है कि इसमें यह होगा (क्योंकि आप बहुत अधिक नियंत्रण प्राप्त कर सकते हैं)।

21

मुझे लगता है कि इस लिंक उपयोगी http://bytes.com/groups/net-c/214456-q-ordering-sorting-category-text-propertygrid

मैं नहीं मानता है वहाँ यह करने के लिए एक तरीका है। एकमात्र चीज जिसे मैं देख सकता हूं, यह इंगित करता है कि आप ऐसा करने में सक्षम हो सकते हैं यह PropertySort संपत्ति है। यदि आप इसे किसी भी पर सेट करते हैं, तो यह कहता है कि गुण प्रदर्शित होते हैं ताकि वे टाइप डिस्क्रिप्टर से प्राप्त हो सकें। हो सकता है कि आप अपनी ऑब्जेक्ट और प्रॉपर्टीग्रीड के बीच प्रॉक्सी प्रकार डिस्क्रिप्टर बनाने में सक्षम हों, जो तब न केवल ऑर्डर में गुणों को वापस लाएगा, लेकिन क्रम में श्रेणियों वाले गुण जो आप चाहते हैं इन्हें ..

+9

उसमें अंतिम चाल शुद्ध बुराई प्रतिभा है ;- गंदा, लेकिन अगर यह काम पूरा हो जाता है .... –

+1

उत्कृष्ट चाल। लेकिन मैंने पाया कि यद्यपि विज़ुअल डिस्प्ले से \ t हटा दिया गया है और आपको सॉर्टिंग को नियंत्रित करने की अनुमति देता है, यह प्रॉपर्टीग्रिड के लिए ऑटो टूलटिप को भ्रमित करता है ताकि कभी-कभी ऐसा लगता है कि इसमें वास्तव में संपत्ति का नाम दिखाने के लिए पूर्ण स्थान नहीं है कर देता है। मामलों को और खराब बनाने के लिए, टूल टिप \ t को सुरक्षित रखती है - इसलिए जब दिखाई देता है तो आपको बहुत सारी सफेद जगह मिलती है। – bsegraves

+2

टूलटिप के साथ समस्या यह करने में सक्षम होने के लाभों की तुलना में मामूली है। अच्छा लगता है। – snae

14

@Marc Gravel की तरह his answer में कहा गया है, इस व्यवहार की अनुमति देने वाले ढांचे में कुछ भी नहीं है। कोई समाधान एक हैक होगा। इसके साथ ही, आप his answer में @Shahab द्वारा सुझाए गए समाधान का उपयोग कार्य-आसपास के रूप में कर सकते हैं, लेकिन यह वास्तव में आपके कोड को बनाए रखने के लिए आपके इरादे को इंगित नहीं करता है। तो मुझे लगता है सबसे अच्छा तुम कर सकते हो एक कस्टम Attribute जो आप के लिए प्रक्रिया को संभालने के लिए CategoryAttribute से विरासत बनाने है: बस आप सेट करना

public class CustomSortedCategoryAttribute : CategoryAttribute 
{ 
    private const char NonPrintableChar = '\t'; 

    public CustomSortedCategoryAttribute( string category, 
              ushort categoryPos, 
              ushort totalCategories) 
     : base(category.PadLeft(category.Length + (totalCategories - categoryPos), 
        CustomSortedCategoryAttribute.NonPrintableChar)) 
    { 
    } 
} 

तो फिर तुम यह रूप में इस तरह

[CustomSortedCategory("Z Category",1,2)] 
public string ZProperty {set;get;} 
[CustomSortedCategory("A Category",2,2)] 
public string AProperty {set;get;} 

उपयोग कर सकते हैं PropertyGrid की UseCompatibletextRendering संपत्ति true पर आपके लिए गैर-प्रिंट करने योग्य वर्णों को छीनने के लिए PropertySortCategorized या CategorizedAlphabetical पर सेट करें और आपको जाने के लिए अच्छा होना चाहिए।

3

उपरोक्त वर्णित '\ t' चाल पर एक छोटी भिन्नता, मैंने बस इसके बजाय कैरिज रिटर्न वर्ण ('\ r') के साथ प्रयास किया। ऐसा लगता है कि एक टैब द्वारा पेश की गई अतिरिक्त जगह के कारण टूलटिप समस्या से काम करता है और इससे बचा जाता है।

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