2014-06-24 3 views
1

У меня есть источник привязки данных, и у него есть связанное свойство. Когда это свойство исходного текста основано на тексте/целой и т. Д., Все работает отлично. Я могу связать это с текстовым полем или ярлыком.Windows Forms - привязка данных к свойствам свойств DataSource

Некоторые из моих свойств - это списки. Это тоже прекрасно, я могу создать новый listBindingSource, указать его источник данных в исходном источнике привязки, а datamember - как список и указать на мой, скажем, список. Я установил DisplayMember в свойство элемента в списке, и он отлично работает.

Однако, если свойство не является ни списком, ни текстом/int, а просто одним объектом ... Я застрял. Невозможно сказать, что я хочу привязать свойство свойства к объекту. Там нет «DisplayMember», чтобы помочь.

Пример:

У меня есть объект MeteredSpace. Он имеет свойство

public string Name {get;set;} 
public List<MeteredSpace> ChildMeteredSpaces {get;set;} 
public MeteredSpace ParentMeteredSpace {get;set;} 

Тогда я определяю следующий встретился

//underlying datasource 
this.meteredSpaceBindingSource.DataSource = typeof(SEMS.LinqObjects.MeteredSpace); 
//data source of children 
this.childMeteredSpacesBindingSource.DataMember = "ChildMeteredSpaces"; 
this.childMeteredSpacesBindingSource.DataSource = this.meteredSpaceBindingSource; 

Теперь для моего управления:

//nice and easy, picking directly from the underlying data source 
this.nameTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text",this.meteredSpaceBindingSource, "Name", true)); 

//our child metered space list box is pretty easy too: 
this.meteredSpaceListBox.DataSource = this.childMeteredSpacesBindingSource; 
this.meteredSpaceListBox.DisplayMember = "Name"; 

//then we come to our parent text box 
this.nameTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text",this.meteredSpaceBindingSource, "ParentMeteredSpace", true)); 

У меня нет никакой возможности указывать его в собственности Имени ParentMeteredSpace как я с полем списка. Я также не могу создать хороший новый источник привязки для него.

Кто-нибудь знает об этом? Я посмотрел на переопределение элемента управления и добавление собственного DisplayMember, но я начал думать, что может быть лучший способ сделать это.

Благодаря

ответ

2

Вы должны быть в состоянии ссылаться через родительские собственности:

Binding b = new Binding("Text", 
         this.meteredSpaceBindingSource, 
         "ParentMeteredSpace.Name", 
         true); 
this.nameTextBox.DataBindings.Add(b); 
+0

К сожалению, мой плохо задаваемый вопрос. Они являются свойствами (сгенерированный код от Linq до Sql). Я исправлю. – Joe

+1

@Joe Обновлено сообщение. – LarsTech

+0

Ничего себе. Это было очень легко, учитывая, как долго я пытался это сделать. Именно поэтому я и спросил. Большое спасибо! – Joe

Смежные вопросы