Announcement

Collapse
No announcement yet.

Problem beim Hinzufügen von Datensätzen über BindingSource

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

  • Problem beim Hinzufügen von Datensätzen über BindingSource

    Hallo Forum.
    So langsam bin ich am verzweifeln. Seit gestern suche ich in diversen Foren nach einer Lösung für folgendes Problem:

    Ich habe 2 Tabellen in Master-Detail Relation (verknüpft über die id der Master - Tabelle in der Detail - Tabelle).

    Im Programm selbst sind die Tabellen jeweils über Bindingsources an 2 DataGridViews gebunden. Die Selektion über das Grid (master_tabelle) zeigt im Grid (detail_tabelle) die jeweils gefilterten Datensätze korrekt an. Auch das Hinzufügen von Datensätzen in der master_tabelle funktioniert problemlos.


    Füge ich in der detail_tabelle einen Datensatz mit BindingSource_detail.AddNew() und abschließendem BindingSource_detail.EndEdit() hinzu, scheint das anfangs auch wie erwartet zu funktionieren. Navigiere ich jetzt aber durch die Master - Tabelle, bekomme ich nach max. 3 - 4 "Zeilenwechsel" eine DataGridView - Ausnahme. Der genaue Fehlertext:

    Code:
    System.IndexOutOfRangeException: Der Index 0 hat keinen Wert. 
      bei System.Windows.Forms.CurrencyManager.get_Item(Int32 index)
      bei System.Windows.Forms.DataGridView.DataGridViewDataConnection.GetError(Int32 rowIndex)
    Hier noch der try - Block, der neue Einträge (eigentlich korrekt) ins Dataset schreiben sollte.
    Code:
    try
    {
    	this.Validate();
    	this.tbldetailBS.EndEdit();
    	this.tbldetailTA.Update(this.bsDataSet.tbldetail);
    }
    catch (Exception ex)
    {
    	MessageBox.Show("Fehler beim Speichern!\n(Fehler: " + ex.Message + ")", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
    	this.tbldetailBS.CancelEdit();
    } //End: try-catch
    und der Code, der beim Navigieren in der master_tabelle beim CurrentChanged - Event aufgerufen wird.
    Code:
    this.tbldetailBS.Filter = "master_id = " + ((DataRowView)this.tblmasterBS.Current).Row["id"].ToString();
    tbldetailBS und tbldetailTA sind die BindingSource und der TableAdapter für die Detail - Tabelle, tblmasterBS die BindingSource für die Master - Tabelle.

    Die Daten, die beim Hinzufügen eines neuen Datensatzes in der Detail - Tabelle eingegeben werden, werden auch komplett und korrekt in die Datenbank (mysql) geschrieben. Nur das DataSet/BindingSource mag irgend etwas nicht.


    Ich hoffe, jemand hat da einen Tipp parat. Habe mittlerweile schon soviel herumprobiert, tausend MessageBox'en an diversen Stellen eingefügt, um Werte während des Programmablaufes zu überprüfen... aber nirgendwo etwas verdächtiges gefunden.


    Gruß, HSMuren

  • #2
    Hallo,

    bekomme ich nach max. 3 - 4 "Zeilenwechsel" eine DataGridView - Ausnahme
    ....

    es ist auszuschließen dass etwas nach 3 oder 4 Zeilenwechseln "passiert"

    Eine mögliche Ursache ist: Felder in die "nichts" eingetragen wird - also "Nothing" oder "NULL" an das DataSet übergeben werden soll. - ( zum Beispiel: DataGridViewCheckBoxColumns!)


    mehr fällt mir leider dazu nicht ein - deine Verzweiflung kann ich nachvollziehen - (mühselig bis gruselig (PC-Zerstörungsträume - )

    Gruß
    Christian

    Comment


    • #3
      Danke schonmal für deine Antwort, cb4866.

      Du hattest Recht, es "passiert" nicht einfach so. Das lag tatsächlich daran, dass bei meinen Tests erst ein paar Zeilen später der von dir angesprochene null - Wert übergeben wurde. Habe die Detail - Tabelle mal etwas mehr gefüllt und die Exception trat immer dann auf, wenn für den jeweiligen Eintrag in der Master - Tabelle kein Eintrag in der Detail - Tabelle vorhanden war.


      Habe den Programmcode schon umgestrickt und lösche die Filterbedingung der tbldetailBS, wenn Current == null (zeigt dann allerdings alle Detaileinträge an).

      Würde jetzt gern, anstatt alle Detaileinträge anzeigen zu lassen, nichts im Detailgrid darstellen. Gibt es da irgendwelche Lösungsansätze?

      Comment


      • #4
        Hallo,

        vor kurzem habe ich zu diesem Thema von Achim (mec) einen hilfreichen Link erhalten: http://www.mec.de/samples/SampleMasterDetail.zip

        ob du über die Filter-Eigenschaft allein glücklich wirst kann ich dir leider auch nicht beantworten, aber viele Wege führen nach ...

        Gruß Christian

        Comment

        Working...
        X