Announcement

Collapse
No announcement yet.

Tabellen und Beziehungen

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

  • Tabellen und Beziehungen

    Hallo allerseits!

    Mein Problem:
    Eine Adressdatenbank (PK =adressID,int) und möchte von einer Titeltabelle und einer Anredetabelle die Namen der jeweiligen Einträge auf mein Formular binden. Beide Tabellen haben eine ID-Spalte.

    Ergebnis:
    Die Adressdaten sind am Formular gebunden die Felder mit den Beziehungen bleiben leer.

    Für Vorschläge wäre ich dankbar

  • #2
    Hallo,

    das DataSet aus ADO.NET kennt keinen "aktuellen Datensatz" mehr, das Programm kann gleichzeitig auf jeden beliebigen Datensatz zugreifen. Diese Flexibilität führt jedoch automatisch dazu, dass das Thema <i>Data Binding</i> komplexer wird, als bisher gewohnt.

    Wenn das Programm mit mehreren Tabellen hantieren muss, geht man normalerweise so vor: <br>
    - mehrere SqlDataAdapter füllen ein typisiertes DataSet <br>
    - Relationen werden visuell über den <b>XSD Schema Designer</b> oder manuell im Code via <b>DataSet.Relations.Add</b> hinzugefügt <br>
    - Controls binden sich nicht direkt an die DataSet-Spalten, sondern an die Relation-Spalten <br>
    - Wenn nicht die Fremdschlüssel, sondern eine andere Spalte aus der anderen Tabelle im DataGrid angezeigt werden soll, greift man auf berechnete Spalten (<b>Expression</b>-Eigenschaft von DataColumn in Verbindung mit <b>Parent</b> bzw. <b>Child</b>) zurück. Das folgende Beispiel demonstriert dies:
    <pre>
    private void buttonFill_Click(object sender, System.EventArgs e)
    {
    dataSetRelationJOIN1.EnforceConstraints = false;
    SqlDataAdapter1.Fill(dataSetRelationJOIN1);
    SqlDataAdapter2.Fill(dataSetRelationJOIN1);
    SqlDataAdapter3.Fill(dataSetRelationJOIN1);
    SqlDataAdapter4.Fill(dataSetRelationJOIN1);
    dataSetRelationJOIN1.EnforceConstraints = true;
    statusBar1.Text = "DataSet wurde gefüllt.";
    }

    private void buttonAddColumn_Click(object sender, System.EventArgs e)
    {
    /*
    VB.NET-Fassung:
    DataSetRelationJOIN1.Tables("KDN").Columns.Add("An rede", GetType(String), _
    "Parent(ANR_KDN).Anrede")

    Siehe Hilfeseite zur Eigenschaft "DataColumn.Expression"
    */

    dataSetRelationJOIN1.Tables["KDN"].Columns.Add("Anrede", typeof(string),
    "Parent(ANR_KDN).Anrede");
    statusBar1.Text = "Neue Spalte wurde hinzugefügt (JOIN-Ersatz)";
    }
    </pre>
    Die Zuordnung eines Controls zu einem <b>BindingContext</b> legt fest, welche Auswirkungen die Auswahl eines Datensatzes in einem Control hat. Zwischen der Anzeige der Daten in den Controls und der Datenquelle liegt mit dem <b>CurrencyManager</b> eine Zwischenschaft (data-binding layer), die für die Synchronsiation aller zusammengehörenden Controls sorgt. Da ein DataSet mehrere Datenquellen (DataTable, DataView) enthalten kann und in die Controls eines Formulars an unterschiedliche Datenquellen gebunden werden können, kann es mehrere Zwischenschichten (je Datenquelle) geben. Die Windows Forms stellen das BindingContext-Objekt zur Verfügung, das einen gemeinsamen Zugriffspunkt auf alle beteiligten CurrencyManager ermöglicht.

    Comment

    Working...
    X