2016-06-20 22 views
1

ich Databinding in WinForm gefunden haben:C# Windows Form Databinding

 BindingSource bs = new BindingSource(); 
     test t = new test(); 
     t.Foo = "Ahmet"; 
     bs.DataSource = t; 
     label1.DataBindings.Add(new Binding("Text", bs, "Foo", false, DataSourceUpdateMode.OnPropertyChanged)); 

das funktioniert, aber ich brauche komplexere Datenbindung. Ich habe Area, Desk-Klassen. Ich bekomme Daten von db und erstelle List-Objekt. Alle Bereiche haben viele Schreibtische.

Ich habe versucht, folgen, aber es funktioniert nicht.Button Text ist null. Wie kann ich Datenbindung verwenden?

BindingSource bs = new BindingSource(); 

foreach (Area area in areaList) 
      { 
       Button btn = new Button(); 
       btn.AutoSize = false; 
       btn.Width = 100; 
       btn.BringToFront(); 
       btn.Height = 35; 
       btn.Font= new Font("Arial", 16, FontStyle.Bold); 
       btn.BackColor = Color.White; 
       btn.FlatStyle = FlatStyle.Flat; 
       btn.TextAlign = ContentAlignment.MiddleCenter; 
       btn.Margin = new Padding(3,5,3,5); 
       btn.DataBindings.Add(new Binding("Text", bs,"Name",false, DataSourceUpdateMode.OnPropertyChanged)); 
       btn.Click += new EventHandler(btnAreaClick); 

       fpnlAreas.Controls.Add(btn); 
      } 

Gebiet Klasse

public class Area : INotifyPropertyChanged 
    { 
     private string _id; 
     private string _name; 
     private List<Table> _table; 

     public event PropertyChangedEventHandler PropertyChanged; 

     public List<Table> ListOfTable 
     { 
      get { return _table; } 
      set { _table = value; 
       OnPropertyChanged("ListOfTable"); 
      } 
     } 




     public string Name 
     { 
      get { return _name; } 
      set { _name = value; 
       OnPropertyChanged("Name"); 
      } 
     } 


     public string Id 
     { 
      get { return _id; } 
      set { _id = value; 
       OnPropertyChanged("Id"); 
      } 
     } 

     public Area() 
     { 
      ListOfTable = new List<Entity.Table>(); 
     } 

     protected virtual void OnPropertyChanged(string Property) 
     { 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(Property)); 
      } 
     } 

    } 

Schreibtisch Klasse

public class Table 
    { 
     private string _id; 
     private string _name; 


     public string Name 
     { 
      get { return _name; } 
      set { _name = value; } 
     } 

     public string Id 
     { 
      get { return _id; } 
      set { _id = value; } 
     } 

     public Table() 
     { 
      ListOfBill = new List<Bill>(); 
     } 

    } 

Antwort

0

Ihre Bindung funktioniert nicht, weil Sie nicht die Datenquelle des Bindingfestgelegt haben.

Code anpassen eine Binding für jeden Bereich zu erstellen und diese verwenden, etwa so:

foreach (Area area in areaList) 
{ 
    BindingSource bs = new BindingSource(); 
    bs.DataSource = area; 

    Button btn = new Button(); 
    btn.AutoSize = false; 
    btn.Width = 100; 
    btn.BringToFront(); 
    btn.Height = 35; 
    btn.Font= new Font("Arial", 16, FontStyle.Bold); 
    btn.BackColor = Color.White; 
    btn.FlatStyle = FlatStyle.Flat; 
    btn.TextAlign = ContentAlignment.MiddleCenter; 
    btn.Margin = new Padding(3,5,3,5); 
    btn.DataBindings.Add(new Binding("Text", bs,"Name",false, DataSourceUpdateMode.OnPropertyChanged)); 
    btn.Click += new EventHandler(btnAreaClick); 

    fpnlAreas.Controls.Add(btn); 
}