2009-03-11 1 views
1

Ich habe eine ziemlich komplexe Windows-Form mit einer Tabbed-Darstellung eines grandParent> Parent> Child-Dataset mit einem stark typisierten Dataset und Bindingsource-Komponenten.Synchronisieren von Databinding-Steuerelementen in komplexen Winforms

Das Herunterfahren der Verleihung funktioniert mit bindngsource; Mein Problem ist, dass ich mehrere 'parallele' Ansichten einiger Daten habe (zB die 1. Registerkarte ist eine Übersichtsansicht von offenen Jobs, andere Registerkarten zeigen Eltern- und Kinderansichten dieser Daten) sowie 'Lookup' Drop-Downs. Alles was ich versuche, synchron zu halten, so dass das Ändern eines Enkel-Datensatzes die Eltern-Bindungs-Quellen aktualisieren würde, sowie die Such-Dropdowns synchronisieren.

Ich kämpfe darum, dass dies richtig funktioniert; Ich habe Eigenschaften Formularebene um den aktuellen Auftrag und Routinen halten, die die Form zB synchronisieren:

auf bindingsource.positionchanged:

SetCurrentDetailJob(Me.PKSitesJobsBindingSource) 

welche ist:

Private Sub SetCurrentJob(ByVal JobBindingSource As BindingSource) 

    If JobBindingSource.Position > -1 Then 
     _CurrentJob = CType(CType(JobBindingSource.Current, DataRowView).Row, ARCallDataSet.JobsRow) 
     _CurrentSite = _CurrentJob.GetParentRow("PK_Sites_Jobs") 
     _CurrentCompany = _CurrentSite.GetParentRow("PK_Company_Sites") 
    End If 

und dann ein sync Form Routine, die macht diese Art von Sache:

CompanyBindingSource.Position = CompanyBindingSource.Find("companyid", drsite.CompanyID) 

Ich kann nie scheinen, total zu vermeiden einige zu vermeiden Art der Kettenreaktion, bei der die Position der Bindungsquellenposition mehrere Ereignisse auslöst, was zu Inkonsistenzen bei nicht korrekt synchronisierten Bindungsquellen führt. Ich bin nicht sicher, der beste Weg, um diese Synchronisationslogik zu behandeln.

Wie nähern sich andere Menschen diesem?

Antwort

0

Ich würde in Betracht ziehen, eigene Ereignisse zu erstellen und wo die Daten geändert werden können, ein "geändert" -Ereignis und überall Databinding hinzufügen einen Handler für das Ereignis, um sicherzustellen, dass es das Ereignis abfängt und seine aktuelle aktualisiert Aussicht.