Announcement

Collapse
No announcement yet.

Datensatz mit bestimmter ID in einem Formular editieren

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

  • Datensatz mit bestimmter ID in einem Formular editieren

    Hallo,

    bin recht neu in Sachen ado.net und habe folgendes Problem:

    Ich habe eine Tabelle, deren Einträge ich in einem Formular anzeigen/editieren/erstellen will. Also habe ich mir daraus ein typed dataset gemacht, wo ich dann recht einfach per Drag&Drop alle Controls inkl. Navigator in dem Formular generieren konnte.
    Soweit so gut. Was ich eigentlich will ist erstmal kein Navigator - also habe ich den gelöscht.
    Das Formular sollte nun die Möglichkeit haben einerseits einen neuen Eintrag anzulegen, andererseits aber auch einen bestehenden zu editieren.

    Stelle mir das wie folgt vor:

    Code:
    myForm mf = new myForm();  // wenn neu erstellt werden soll
    myForm mf = new myForm(id);  // wenn element mit der id id angezeigt und editiert werden soll.
    mf.ShowDialog();
    im ersten Fall (neu erstellen) mache ich das im Formular dann über
    Code:
    myBindingSource.AddNew();
    Ist das so der richtige weg? Und wie kann ich in der Form das Element mit einer bestimmten id zum editieren öffnen?

    Am besten wäre es wohl Model und Controller zu trennen und sowas zu nutzen wie MyModelHelper.createEntity() und die Rückgabe dann irgendwie an die Controls in der Form zu binden, oder?

    Danke für jeden Tip. Bin bei google und hier leider nicht wirklich fündig geworden...

    Peter


    PS: Ein weiteres Problem, ist dann bei AddNew nicht automatisch die id gesetzt wird. Sie ist autoincrement und es wäre natürlich nett, wenn da die nächste Nummer drin steht. Hat dazu noch jemand einen Tip?

    PPS: Ist das Problem so verständlich?

  • #2
    Hallo,

    ein Beispiel für das Editieren des ausgewählten Datensatzes in einem anderen Formular könnte so aussehen:

    a) Hauptformular

    Code:
           private void toolStripButtonDetailForm_Click(object sender, EventArgs e)
            {
                using (FormDetail aFrm = new FormDetail())
                {
                    aFrm.DoEdit(this.testTblBindingSource, this.dataSet1);
                }
            }
    b) Editierformular

    Code:
            public void DoEdit(BindingSource aFrmMainBindingSource, DataSet1 aFrmMainDataSet)
            {
                this.testTblBindingSource.DataSource = aFrmMainDataSet; 
                this.testTblBindingSource.Position = aFrmMainBindingSource.Position;
                if (this.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    this.testTblBindingSource.EndEdit();
                }
                else
                {
                    this.testTblBindingSource.CancelEdit();
                }
            }

    Wenn die Spaltenwerte bei einem neuen Datensatz initialisiert werden sollen, ist folgendes notwendig:

    Code:
            private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e)
            {
                DataRowView aDRV = (DataRowView)this.testTblBindingSource.Current;
                DataSet1.TestTblRow aNewRow = (DataSet1.TestTblRow)aDRV.Row;
                aNewRow.wert = "(bitte ausfüllen)";
                aNewRow.datum = DateTime.Today;
                this.testTblBindingSource.ResetCurrentItem();
            }

    Am besten wäre es wohl Model und Controller zu trennen...
    Der von den Wizards von Visual Studio zusammengebaute Weg trennt bereits die Bestandteile auf, ab Visual Studio 2008 ist zudem auf Wunsch die automatische Trennung des DataSets (Model) und des TableAdapters (DAL) in verschiedenen Klassenbibliotheken möglich. Es macht keinen Sinn, auf diesen Wizard-Komfort zu verzichten und statt dessen irgend ein in Java übliches Pattern im Maßstab 1:1 nachzubauen ;-)

    Ein weiteres Problem, ist dann bei AddNew nicht automatisch die id gesetzt wird. Sie ist autoincrement und es wäre natürlich nett, wenn da die nächste Nummer drin steht. Hat dazu noch jemand einen Tip?
    Wenn ein typisiertes DataSet angelegt wird, kann diese Spalte im Eigenschafts-Editor bereits als AutoIncrement gekennzeichnet werden. Wenn zusätzlich die Eigenschaften Eigenschaften AutoIncrementSeed und AutoIncrementStep mit dem Wert -1 vorbelegt werden, kann es später bei einem UPDATE niemals zu Kollisionen mit den bereits vorhandenen Datensätzen der Datenbank kommen.

    Comment

    Working...
    X