Announcement

Collapse
No announcement yet.

Dataset über 2 Formulare

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

  • Dataset über 2 Formulare

    <p>Hallo,

    </p><p>ich habe im Moment ein Umsetzungsproblem. Ich habe eine Hauptfenster, in welchem die Kundendaten angezeigt werden. Dazu habe ich mehrere SQLDataAdapter und ein Typisiertes Dataset, in welchem die Tabellen enthalten sind.</p><p>

    So sieht z.B. das Hauptformular so aus, das darin Kundengruppe, Firma, Strasse, PLZ ... an die Steuerelemente gebunden sind. "Kundengruppe" ist eine Combobox in welcher die entsprechende Gruppe (Interessent,Kunde,...) zugewiesen werden kann. Über eine Schaltfläche möchte ich nun ein neues Formular aufrufen, in welchem ich die Gruppen, welche innerhalb der DB in einer eigenen Tabelle stehen, über ein Datagrid angezeigt und verändert werden können. Diese Veränderungen sollen gleichzeitig im Hauptfenster übernommen werden und der richtige Wert soll auch gleich in der Combobox stehen.</p><p>

    Wie kann ich diese Daten in beiden Formularen synchronisieren und in der DB ergänzen?
    </p><p>
    mfg</p><p>
    Brian</p>

  • #2
    Hallo,

    indem beide Formular die gleiche DataSet-Instanz verwenden und dazu auch über die identische <b>CurrencyManager</b>-Instanz auf das DataSet zugreifen. Siehe dazu das Beispiel <i><a href="/webx?13@@.4a8709c5/0">Andreas Kosch "Werte Übergabe???" 24.06.2004 06:51</a></i&gt

    Comment


    • #3
      <p>Hallo,</p><p>
      ich habe es so wie im angegebenen Beispiel gemacht. Ich habe jedoch im zweiten Formular ein DataGrid zusätzlich zu einem Textfeld, im ersten Formular eine Combobox.</p><p>
      Wie kann ich es erreichen, das beide Formulare auf den ausgewählten Datensatz zeigen?</p><p>
      <pre>
      private DataRowView aDRV;
      private DataView aDV;
      public void DoEditData(CurrencyManager aCM)
      {
      aDRV = aCM.Current as DataRowView;
      aDV = aDRV.DataView;
      this.BindingContext[aDV].Position = aCM.Position;
      dataGrid1.DataSource = aDV;
      textBox1.DataBindings.Add("Text", aDV, "KAnrede");
      if (this.ShowDialog() == DialogResult.OK)
      aCM.EndCurrentEdit();
      else
      aCM.CancelCurrentEdit();
      }
      </pre>

      mfg
      Bria

      Comment


      • #4
        Hallo,

        das abgewandelte vollständige Beispiel sieht so aus:

        <b>a) Hauptformular zeigt einen Datensatz in 2 TextBoxen an </b>

        Die Eigenschaft <b>Modifiers</b> von <i>dataSet11</i> wird im Propierties-Editor auf <b>Public</b> gesetzt, damit das 2. Formular auf die gleiche Datenquelle zugreifen kann.
        <pre>
        <b>private</b> CurrencyManager aCM;
        <br>
        <b>private</b> <b>void</b> Form1_Load(<b>object</b> sender, System.EventArgs e)
        {
        sqlDataAdapter1.Fill(dataSet11, dataSet11.Region.TableName);
        aCM = (CurrencyManager)BindingContext[dataSet11, dataSet11.Region.TableName];
        <font color="#003399"><i>// Zum 3. Datensatz wechseln, damit die TextBoxen etwas anzeigen</i></font>
        aCM.Position = 2;
        }
        <br>
        <b>private</b> <b>void</b> button1_Click(<b>object</b> sender, System.EventArgs e)
        {
        Form2 aFrm2 = <b>new</b> Form2();
        aFrm2.DoEditData(aCM, <b>this</b>);
        }
        </pre>
        <b>b) 2. Formular zeigt den gleichen Datensatz als ausgewählten Datensatz im DataGrid an</b>

        Im 2. Formular wird eine DataView-Komponente von der Toolbox in den Designerbereich von VSNET gezogen, damit dort das DataGrid angebunden werden kann. Der für das 2. Formular zuständige CurrencyManager wird auf die gleiche Position gesetzt wie der als Argument beim Aufruf übergebene Hauptformular-CurrencyManager.
        <pre>
        <b>public</b> <b>void</b> DoEditData(CurrencyManager aCM, Form1 aFrmMain)
        {
        dataView1.Table = aFrmMain.dataSet11.Region;
        <b>this</b>.BindingContext[dataView1].Position = aCM.Position;
        dataGrid1.DataSource = dataView1;
        <b>if</b> (<b>this</b>.ShowDialog() == DialogResult.OK)
        aCM.EndCurrentEdit();
        <b>else</b>
        aCM.CancelCurrentEdit();
        }
        </pre&gt

        Comment

        Working...
        X