2010-02-08 12 views
11

मैं एक रूप है, जहां मैं एक नेट ListView नियंत्रण करने के लिए कॉलम जोड़ में एक समस्या है, इस क्रम में:नेट ListView स्तंभ क्रम समस्या

A | B | C | D 

कॉलम विज्ञापन के लिए प्रदर्शन सूचकांक 0 है -3, इसी क्रम में, फिर भी वे गलत क्रम में प्रदर्शित:

A | B | D | C 
      ^-----^ these are switched at runtime 

नोट: सब कुछ लगता है जैसे मैं इसे डिजाइन समय में चाहते हैं।

मुझे लगता है, लेकिन मुझे नहीं पता कि क्यों, ऐसा इसलिए है क्योंकि मैंने स्तंभ डी को जोड़ने के बाद सूची दृश्य में कॉलम सी जोड़ा था। मैंने इसे कॉलम संपादक संवाद में एक पायदान ऊपर ले जाया, प्रदर्शन सूचकांक को समायोजित किया, और Designer.cs फ़ाइल में निर्माण आदेश की जांच की, सब कुछ क्रम में एडी है, उस क्रम में।

फिर भी समस्या बनी रहती है।

यह भी ध्यान दें: यह केवल एक शीर्षक लेबल समस्या नहीं है, कॉलम उनके डेटा समेत चारों ओर बदल जाते हैं। डेटा को उस क्रम में जोड़ा जाता है जिसे मैं प्रदर्शित करता हूं, लेकिन अंतिम दो कॉलम बदल दिए जाते हैं।

मुझे यह जानने के लिए और क्या करना चाहिए कि मेरे कॉलम में से कोई एक गलत स्थिति में क्यों है?

मुझे समस्या का पता चला। किसी कारण से DisplayIndex प्रॉपर्टी जारी नहीं है, भले ही मैं इसे संवाद में सेट करता हूं।

अगर मैंने फॉर्म को पूरी तरह बंद कर दिया है, और इसे विजुअल स्टूडियो में फिर से खोल दिया है, तो यह चारों ओर स्थानांतरित हो गया। स्पष्ट रूप से उन गुणों को संवाद संपादक द्वारा "बदले" के रूप में नहीं पहचाना जाता है, और इस प्रकार सहेजने के तंत्र को मेरे लिए इसे सहेजने की परवाह नहीं है।

कोड कि कॉलम जोड़े, इस तरह था:

this.lvResult = new System.Windows.Forms.ListView(); 
this.colResultId = new System.Windows.Forms.ColumnHeader(); 
this.colResultTitle = new System.Windows.Forms.ColumnHeader(); 
this.colResultLanguage = new System.Windows.Forms.ColumnHeader(); 
this.colResultTags = new System.Windows.Forms.ColumnHeader(); 
// 
// lvResult 
// 
this.lvResult.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
      | System.Windows.Forms.AnchorStyles.Left) 
      | System.Windows.Forms.AnchorStyles.Right))); 
this.lvResult.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { 
this.colResultId, 
this.colResultTitle, 
this.colResultLanguage, 
this.colResultTags}); 
this.lvResult.FullRowSelect = true; 
this.lvResult.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; 
this.lvResult.HideSelection = false; 
this.lvResult.Location = new System.Drawing.Point(12, 6); 
this.lvResult.Name = "lvResult"; 
this.lvResult.Size = new System.Drawing.Size(466, 117); 
this.lvResult.TabIndex = 0; 
this.lvResult.UseCompatibleStateImageBehavior = false; 
this.lvResult.View = System.Windows.Forms.View.Details; 
this.lvResult.SelectedIndexChanged += new System.EventHandler(this.lvResult_SelectedIndexChanged); 
// 
// colResultId 
// 
this.colResultId.Text = "#"; 
this.colResultId.Width = 35; 
// 
// colResultTitle 
// 
this.colResultTitle.Text = "Title"; 
this.colResultTitle.Width = 220; 
// 
// colResultTags 
// 
this.colResultTags.DisplayIndex = 2; 
this.colResultTags.Text = "Tags"; 
this.colResultTags.Width = 100; 
// 
// colResultLanguage 
// 
this.colResultLanguage.Text = "Language"; 

जब मैं याद आ रही गुण सीधे फाइल में कहा, यह काम किया।

उत्तर

5

क्या यह शायद .designer के बजाय फॉर्म के .resx पर कुछ बना रहा है? मैं कल्पना नहीं कर सकता क्यों यह ऐसा करेगा, लेकिन हाँ ...

शायद अगर सब कुछ विफल हो जाए, तो अपने फॉर्म से ListView को हटाने का प्रयास करें। फिर, जंक फॉर्म पर लिस्ट व्यू को पुन: बनाने के लिए अपनी परियोजना में एक नया जंक फॉर्म बनाएं, यह सुनिश्चित करने के लिए जंक फॉर्म का परीक्षण करें कि आपको अजीब वूडू व्यवहार नहीं मिल रहा है, और फिर सूची दृश्य को जंक फ़ॉर्म से वापस अपने वास्तविक रूप में कॉपी करें?

बहुत जटिल, मुझे पता है ...

+0

नहीं, डिफ़ॉल्ट आइटम को छोड़कर, फॉर्म के लिए .resx फ़ाइल पूरी तरह खाली है। –

+0

एक और सुझाव जोड़ा गया ... स्ट्रॉ पर grasping। :) – Yoopergeek

+0

यदि मैं इसे समझ नहीं पा रहा हूं, तो मैं इसे बाद में फिर से जोड़ दूंगा, लेकिन चूंकि यह अब के लिए शोस्टॉपर समस्या नहीं है, इसलिए मैं इसे रखूंगा, उम्मीद कर रहा हूं कि मैं (या यहां कोई) इसे समझने में मेरी सहायता कर सकता है, ताकि मैं भविष्य में इससे बच सकूं। –

1

यह करने के लिए एक तरीका होता है, ListView के लिए उत्पन्न डिजाइन बार कोड के लिए कदम है, और यह कॉलम है, तो उन्हें एक विधि में धक्का ... यहाँ के लिए देख एक उदाहरण

 
public Mainform(){ 
    InitializeComponent(); 
    // 
    InitListView(); 
} 

public void InitListView(){ 
    // Design time generated code and manually add it here. 
} 

यह अजीब डिजाइन समय के मुद्दों से निपटने की बकवास रास्ता है .... केवल कठिनाई यह है, तो आप एक और स्तंभ जोड़ना चाहते हैं, तो आप नहीं यह डिजाइन समय में देखेंगे ...

उम्मीद है कि यह मदद करता है, सर्वश्रेष्ठ संबंध, टॉम।

5

मुझे विजुअल स्टूडियो 2010 का उपयोग करके यह समस्या थी। जब मैंने डिजाइनर जेनरेट कोड को देखा, तो उसने केवल कुछ कॉलम के लिए डिस्प्ले इंडेक्स सेट किया था।डिजाइन समय पर कॉलम सही क्रम में थे लेकिन रनटाइम पर वे एक अलग क्रम में थे। जब मैंने अपने कॉलम जोड़े, तब भी उनके पास डिज़ाइनर जेनरेट किए गए नाम थे, उदा। ColumnHeader1, आदि। जब मैंने उन्हें अधिक अर्थपूर्ण नामों में बदल दिया और मेरा ऐप चलाया, तो रनटाइम कॉलम ऑर्डरिंग सही थी। मैंने डिज़ाइनर जेनरेट कोड को देखा और देखा कि उसने कॉलम सृजन कोड को फिर से दर्ज किया है और सभी डिस्प्ले इंडेक्स मानों को हटा दिया है (क्योंकि उनकी आवश्यकता नहीं थी)

+1

वही है। मैं डिजाइनर से उत्पन्न कोड को संपादित करके चीजों को सही करने में सक्षम था। यह पूरी तरह से लंगड़ा है कि हमें इससे निपटने की जरूरत है। –

+0

वीएस 2015 में एक ही समस्या। नए कॉलम जोड़े गए, लेकिन ऑर्डर और डिस्प्ले इंडेक्स को जो मैं चाहता था उसे बदल दिया। डिजाइनर सही लेआउट दिखाता है, और कॉलम संपादक सही इंडेक्स दिखाता है। जेनरेट कोड इसे अनदेखा करता है।मेरे लिए समाधान आपके सुझाव के समान था, कॉलम का नाम बदलें और फिर जेनरेट कोड डिस्प्ले इंडेक्स खो देता है। आदेश को सरणी में संग्रहीत क्रम से लिया जाता है (जो सही है)। – tjmoore

-1

मुझे पता है कि इसे कैसे ठीक किया जाए, आपको परियोजना को पुनर्निर्माण करने की आवश्यकता है, यह फिर से अच्छा आ जाएगा।

+0

काम नहीं करते हैं। बनाम2013 –

+0

काम नहीं करता है - आदेश बनी हुई है। – Asher

0

सदस्यों को स्थानांतरित करने से अधिक, आपको DisplayIndex को रीसेट करने की आवश्यकता है। डी से 4

+0

"प्रदर्शन सूचकांक समायोजित" - ताकि पहले ही कोशिश की जा सके। मेरे पास एक ही समस्या है। यह आपके द्वारा सेट की गई इंडेक्स को अनदेखा कर रहा है, हालांकि उन्हें कहीं भी संग्रहीत किया गया है, केवल जेनरेट कोड में नहीं। – tjmoore

0

के लिए डिस्प्ले इंडेक्स को डिस्प्ले इंडेक्स सेट करें और डिस्प्ले इंडेक्स प्रॉपर्टी के प्रत्येक कॉलम के लिए मैं डिज़ाइनर संपादित करता हूं और हाथ से लिखता हूं। ठीक बनाता है, ठीक चलाता है। हालांकि अब मैं देखता हूं कि डिजाइनर थोड़ा बदल गया है, लेकिन मेरे लिए यह ठीक काम करता है।

-1

मेरे पास अब और फिर यह समस्या है, लेकिन केवल तभी जब मैं किसी प्रोजेक्ट में कई बदलाव करता हूं और ListView में दूसरों के सामने कॉलम डालता हूं।

मुझे तीन अलग-अलग फ़िक्स काम मिलते हैं, लेकिन हर समय कोई भी काम नहीं करता है। हालांकि, निम्नलिखित ने हमेशा मेरे लिए काम किया है:

  1. बीच में किसी भी कॉलम को नीचे ले जाएं।
  2. परियोजना बिल्ड पुनर्निर्माण >> पुनर्निर्माण
  3. बंद तो परियोजना

मुझे लगता है फिर से खोलना है कि न तो (1) और न ही (2) हर बार काम करता है, और है कि नहीं कर रहा (3) में परिणाम कर सकते अगली खुली जगह पर लौटने के लिए ऑर्डर ऑफ ऑर्डर की स्थिति।

0

मैं विजुअल स्टूडियो 2017 में एक ही समस्या में भाग रहा था। डिजाइन समय पर, वे सही क्रम में थे। लेकिन रन टाइम पर, अंतिम 2 कॉलम स्विच किए गए थे।

आखिरकार मेरे लिए यह तय किया गया कि सूची दृश्य कार्य (छोटे बटन जो सूची दृश्य के ऊपरी दाएं कोने पर दिखाई देता है) और दृश्य को बड़े आइकन में बदल दें। परियोजना चलाओ। बाहर निकलें वापस जाएं और दृश्य को विवरण में बदलें और इसे चलाएं। उसने मेरे लिए इसे हल कर दिया।