2010-01-15 3 views
1

J'ai un formulaire Windows (net 2.0) avec des contrôles liés à une entité (w/INotifyPropertyChanged) via un BindingSource..works.Winform BindingSources - Question

Sur la même forme que j'ai une liste déroulante qui est également câblé par un BindingSource..works

Voici un échantillon du code correspondant:

m_PlanItemLookupBindingSource.DataSource = GetBusinessLogic().RetrievePaymentPlanLookups(); // Collection of PaymentPlans 
paymentPlanType.Properties.DataSource = m_PlanItemLookupBindingSource; 
paymentPlanType.Properties.DisplayMember = "Name"; 
paymentPlanType.Properties.ValueMember = "ID"; 
paymentPlanType.DataBindings.Add(new Binding("EditValue", m_PlanBindingSource, "PaymentPlanID", true, DataSourceUpdateMode.OnPropertyChanged, null, "D")); 

agencyComission.DataBindings.Add(new Binding("EditValue", m_PlanBindingSource, "AgencyCommission", true, DataSourceUpdateMode.OnPropertyChanged, null, "P1")); 
billingType.DataBindings.Add(new Binding("Text", m_PlanBindingSource, "BillingType")); 

Alors, quand je change une valeur Dans la liste déroulante, je pensais que la propriété m_PlanItemLookupBindingSource Current changerait avec la propriété PaymentPlanID de l'entité qui change.

Juste un peu confus.

Merci à l'avance, Stephen

Répondre

1

BindingSource prend la valeur dans le contrôle et fixe dans la source sous-jacente, qui est l'objet courant déterminé par la propriété Position du BindingSource. Par conséquent, lorsque vous sélectionnez une valeur dans la liste déroulante, la propriété PaymentPlanID de l'objet sous-jacent est définie avec la nouvelle valeur sélectionnée. L'objet sous-jacent est identifié par la propriété Current dans BindingSource.

Si vous souhaitez déplacer la propriété Current vers l'objet que vous sélectionnez dans la liste déroulante, vous devez utiliser les méthodes MoveFirst, MoveLast, MovePrevious ou MoveNext ou la propriété Position sur BindingSource. Comme je le vois, vous pouvez faire ce qui suit: dans le gestionnaire d'événements de l'événement Changed ou ValueChanged dans la liste déroulante, vous obtenez l'index de l'élément sélectionné, l'index que vous pouvez transmettre à BindingSource. Positionner la propriété.

Changed or ValueChanged event handler 
    ... 
    int index = DropDownList.ListIndex 
    BindingSource.Position = index 
    ... 
End event handler 

Vous devez supprimer la DataBinding qui relie le menu déroulant de la liste sefrom de la liste déroulante EditValue au PaymentPlanID. De cette façon, le PaymentPlanId de l'objet sous-jacent n'est pas défini sur la valeur sélectionnée avant que la Position dans le BindingSource ne soit modifiée.