Announcement

Collapse
No announcement yet.

Binding Source in Klasse kapseln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Binding Source in Klasse kapseln

    Ich habe unter VB 2005 sowhl die Datatable, Dataview als auch die Bindingsource-Objekte in eine eigene Klasse gekapselt. Alle Methoden und Eigenschaften sind mit shared deklariert, so dass eine Instanzierung eines Objektes für diese Klasse nicht notwedig ist. Wenn ich allerdings das Bindingsource-Objekt an ein Datagridview und an einen Bindingnavigator binde findet keine Synchronisation statt. Sofern ich den Code auf die herkömmliche Weise ohne eine Klasse integriere klappt es einwandfrei. Irgendwelche Vorschläge ? Hier die Methode der Binding Source aus der Klasse:

    Public Shared Function bs_vorgang_erstellen() As BindingSource
    Try

    _sql_string = "Select * FROM dbo.tbl_Vorgang"
    da_1 = New SqlClient.SqlDataAdapter(_sql_string, gcnn2)
    Dim Cb As New SqlCommandBuilder(da_1)

    dt_1 = New DataTable("Vorgang")
    da_1.Fill(dt_1)

    bs_1 = New BindingSource
    bs_1.DataSource = dv_1


    Return bs_1

    Catch ex As SqlException
    Throw New SystemException(ex.Message)
    Catch ex As SystemException
    Throw New SystemException(ex.Message)
    End Try

    End Function

  • #2
    Hallo,

    >Ich habe .... in eine eigene Klasse gekapselt.

    mit ADO.NET 2.0 (TableAdapter, BindingSource) und Visual Studio 2005 (Data Sources-Fenster) richtet sich die Datenbindung verstärkt nach dem Schichtenmodell aus. Es gibt den <i>Data Access Layer</i> (TableAdapter) und den <i>Präsentation Layer</i> (BindingSource als nichtvisuelle Komponente im Formular). Die BindingSource kapselt den Datenbindungskontext des Containers (Formular) ein.
    Jedes von der Klasse <i>System.Windows.Forms.Control</i> abgeleitete Steuerelement stellt die Eigenschaft <i>BindingContext</i> zur Verfügung. Ein normales Steuerelement wie zum Beispiel die TextBox liefert jedoch über diese Eigenschaft nur den BindingContext des Containers zurück, in dem das Steuerelement enthalten ist. Nur die Container-Controls (die zum Beispiel wie bei einem Formular andere Steuerelemente einbetten können) nutzen somit den BindingContext, um Grenzlinien beim gleichzeitigen Binden an verschiedene Datenquellen einzuziehen. Alle Steuerelemente, die sich innerhalb der gedachten Grenzlinie befinden, synchronisieren sich automatisch, wenn sich der vom <i>CurrencyManager</i> verwaltete virtuelle Datensatzzeiger der Datenquelle ändert. Die Datenbindung stellt somit über den BindingContext sicher, dass nur zusammenhängende Informationen in der Benutzeroberfläche erscheinen, wenn diese über mehrere angebundene Controls angezeigt werden.
    Die <i>BindingSource</i>-Komponente "versteckt" den <i>CurrencyManager</i> über die Kapselung in die nichtvisuelle Komponente.

    Lange Rede - kurzer Sinn: Der Zusammenbau aller Teile in eine statische Klasse (Shared) macht keinen Sinn, da die BindingSource-Komponente in jedem Fall immer nur im Kontext eines bestimmten Containers (alias Formular-Instanz) gültig ist.

    P.S: Bei einer Auslagerung in die statische Klasse verschenkt man außerdem die Produktivätsvorteile, da in diesem Fall die von Visual Studio 2005 bereitgestellten Optionen der visuellen Konfiguration nur stark eingeschränkt nutzbar sind.

    Comment

    Working...
    X