2012-06-18 14 views
5

मैं नहीं समझ सकता क्यों मेरे DataGridView खाली किया जा रहा है (यदि कोई भी पंक्ति, कोई स्वत: जनरेट कॉलम) पर रहता है:BindingSource/DataGridView बातचीत

BindingList<MyObject> bList = new BindingList<MyObject>(); 
fileStream.Position = 0; 
MyObject.Deserialize(fileStream).ForEach(
    j => bList.Add(j)); 

this.bindingSource1.SuspendBinding(); 

this.dataGridView1.Columns.Clear(); 
this.dataGridView1.AutoGenerateColumns = true; 
this.dataGridView1.Enabled = false; 
this.dataGridView1.Invalidate(); 
this.bindingSource1.DataSource = bList; 
this.dataGridView1.DataSource = bindingSource1; 
this.bindingSource1.ResumeBinding(); 
this.dataGridView1.Enabled = true; 
this.dataGridView1.Refresh(); 

अगर मैं क्या स्पष्ट रूप जहां MyObject रूप

public class MyObject 
{ 
    public DateTime CreationDate; 
    public string CreationId; 

    public static List<MyObject> Deserialize(Stream s) 
    { 
     XDocument xml = XDocument.Load(s); 

     var ps = from p in xml 
         .Descendants("p") 
         .Descendants("object") 
        select 
         new MyObject 
         { 
          CreationId = p.Attribute("creationid").Value 
         }; 

     return ps.ToList(); 
    } 

} 

परिभाषित किया गया है इसके अलावा नीचे दिए गए कॉलम सेट करें, पंक्तियों को ग्रिड में जोड़ा जाता है लेकिन वे सभी खाली हैं

DataGridViewTextBoxColumn dc = new DataGridViewTextBoxColumn(); 
      dc.DataPropertyName = "CreationDate"; 
      dc.HeaderText = "CreationDate"; 
      dc.Name = "CreationDate"; 
      dc.Visible = true; 
      dc.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; 
      this.dataGridView1.Columns.Add(dc); 

      dc = new DataGridViewTextBoxColumn(); 
      dc.DataPropertyName = "CreationId"; 
      dc.HeaderText = "CreationId"; 
      dc.Name = "CreationId"; 
      dc.Visible = true; 
      dc.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; 
      this.dataGridView1.Columns.Add(dc); 
+0

बस त्वरित टिप्पणियों - 1. नाम बदलें करने के लिए प्रयास करें ऑब्जेक्ट में ग्रिड व्यू की 'डेटाप्रोपर्टी' और 'क्रिएशनडेट' जैसी 'क्रिएशन आईडी' के रूप में 'सृजनशील' गायब है। –

+0

ऊपर टिप्पणी केवल तभी वैध है जब 'Autogeneratecolumn को गलत पर सेट किया गया है' -> परिदृश्य –

+0

गलत। सृजनशील xml में इस तरह लिखा गया है। आपका समाधान काम नहीं करेगा। – Mauro

उत्तर

4

Winforms में परियोजना, इस कोड (क्या आप & it works ! पोस्ट किया है की सिम्युलेटर की तरह) की कोशिश & तो समस्या को कम करने के लिए नक्शे/डिबग अपने मौजूदा कोड को: -

DataGridView dgv = new DataGridView(); 
    //Note: AutogenerateColumns is true by default 
    BindingSource bs = new BindingSource(); 
    BindingList<Customer> bList = new BindingList<Customer>(); 

    // Fill bList with Customers 
    bList.Add(new Customer(){Name="John"}); 

    bs.DataSource = bList; 
    dgv.DataSource = bs; 

    this.Controls.Add(dgv); 

MyObject बराबर : -

public class Customer 
    { 
     public string Name { get; set; } 
    } 

तो, to Debug your codeऊपर एक के मानचित्रण द्वारा, आप निकाल सकते हैं इन बिट्स -

this.bindingSource1.SuspendBinding(); 
this.dataGridView1.Columns.Clear(); 
this.dataGridView1.AutoGenerateColumns = true; 
this.dataGridView1.Enabled = false; 
this.dataGridView1.Invalidate(); 
this.bindingSource1.ResumeBinding(); 
this.dataGridView1.Enabled = true; 
this.dataGridView1.Refresh(); 

& just have this 1 परीक्षण में -

this.bindingSource1.DataSource = bList; 
this.dataGridView1.DataSource = bindingSource1; 
+0

काम नहीं कर रहा है। क्षमा करें – Mauro

+0

आपको यह इंगित करना चाहिए था कि मैं गायब था {get; सेट;} लेकिन त्वरित उत्तर के लिए +1 – Mauro

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