2009-07-09 18 views
7

को मैं एक IList<string> एक समारोह से लौट रहे है (के रूप में चर lst) और मैं सेट और फिर मैंनेट/सी # IList <string> बाध्यकारी एक DataGridView

this.dataGridView1.DataSource = lst; 

datagrid फिर एक शीर्षक वाले स्तंभ की लंबाई कहते हैं और सूचीबद्ध करता है प्रत्येक स्ट्रिंग की लंबाई। मैं इसे तारों की सूची कैसे बना सकता हूं?

+1

अपने IList होते हैं केवल स्ट्रिंग्स में कोड उदाहरण

class MyString { private string _text; public string Text { get { return _text; } set { _text = value; } } } 

जोड़ा जा रहा है? या इसमें कुछ अन्य प्रकार, '' है? – Nate

+0

उह ... उन्होंने कहा कि यह एक IList है ... – Clyde

उत्तर

13

आपको वास्तव में उन वस्तुओं की एक सूची चाहिए जो में एक स्ट्रिंग प्रॉपर्टी है। .NET 3.5 के साथ आप को धोखा दे सकता है:

.DataSource = list.Select(x=>new {Value = x}).ToList(); 

अन्यथा एक डमी वर्ग बना सकते हैं और मैन्युअल रूप में डेटा की प्रतिलिपि ...

+0

वास्तव में जो मैं खोज रहा था, अज्ञात प्रकार इस तरह की चीज़ के लिए बहुत अच्छे हैं। –

+0

लेकिन यदि आप सूची मूल्यों को बदलते हैं तो DataGridView udpdate नहीं होगा ... – Pedro77

1

इसका कारण यह है DataGridViews ऑब्जेक्ट के गुणों को प्रदर्शित करते हैं। इस मामले में सूची में केवल एक संपत्ति "लंबाई" है, इसलिए यह केवल "लेनगेट" प्रदर्शित कर सकती है (डेटाटाइप के बावजूद)। आपको अपनी इच्छित चीज़ों को प्राप्त करने के लिए एक रैपर क्लास बनाने की आवश्यकता है ("टेक्स्ट" की संपत्ति वाले "माईस्ट्रिंग" क्लास, फिर आपके ग्रिड में प्रदर्शित एक सूची है)।

आशा इस

में मदद करता है 'को क्रियान्वित रूप

private List<MyString> foo() 
     { 
      List<MyString> lst = new List<MyString>(); 
      MyString one = new MyString(); 
      MyString two = new MyString(); 
      one.Text = "Hello"; 
      two.Text = "Goodbye"; 
      lst.Add(one); 
      lst.Add(two); 
      return lst; 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      dataGridView1.DataSource = foo(); 

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