Autor Beitrag
AndreasK
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Sa 09.03.13 22:20 
Hallo
Bin C# Anfänger und möchte mir eine kleine Datenbank basteln
Ich habe mir vom Assistenten eine Datenbank (Datenbankdatei) erstellen lassen und habe dann zwei Tabellen hinzugefügt.
Eine Mastertabelle mit MasterID und MasterWert und eine Detailtabelle mit DetailID, MasterID für die Relation und einen DetailWert.
Also jeder MasterWert hat X DetailWerte.
Wenn ich die Tabellen von Hand ändere funktioniert alles gut, auch speichern und löschen.

Ich möchte aber eigentlich die Daten von aussen eingeben.

Wenn ich die Mastertabelle über btnMasterWert_Click ändere ist auch alles ok.
Wenn ich die Detailtabelle über btnDetailWert_Click ändere habe ich lange herumprobiert.
Gibt es keinen besseren Weg die DetailTabelle zu ändern, ich muss immer voher den aktuellen RowIndex der Mastertabelle lesen, um die Relation korrekt in "MasterID" der DetailTabelle zu schreiben?

ausblenden C#-Quelltext
1:
anyRow["MasterID"] = rowindex.ToString();					


Die Mastertabelle muss auch voher gespeichert werden um die richtige MasterID zu erhalten.

Danke.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
  
        private void btnMasterWert_Click(object sender, EventArgs e)
        {                
            DataRow anyRow = this.masterDetailDataSet.tableMaster.NewRow();
            anyRow["MasterWert"] = "123";
            this.masterDetailDataSet.tableMaster.Rows.Add(anyRow);
            save();
        }

        private void btnDetailWert_Click(object sender, EventArgs e)
        {
            int rowindex = tableMasterDataGridView.CurrentCell.RowIndex;
            rowindex += 1;
           
            DataRow anyRow = this.masterDetailDataSet.tableDetail.NewRow();
            anyRow["MasterID"] = rowindex.ToString();
            anyRow["DetailWert"] = "456";
            this.masterDetailDataSet.tableDetail.Rows.Add(anyRow);
            save();
        }

        private void save()
        {
            this.Validate();
            this.tableMasterBindingSource.EndEdit();
            this.tableAdapterManager.UpdateAll(this.masterDetailDataSet);
        }


Moderiert von user profile iconTh69: Beitragsformatierung überarbeitet.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 10.03.13 11:33 
Hallo AndreasK :welcome:

es sollte klar sein, daß man Detaildaten nur dann korrekt abspeichern kann, wenn man auch den entsprechenden Master-ID Eintrag abgespeichert hat (denn sonst würde ja die Fremdschlüsselbeziehung fehlschlagen).

Du scheinst die Master-ID als "Autoincrement"-Wert angelegt zu haben, daher wundert es mich etwas, daß du dann den "Row-Index" abfragst - und nicht dessen Id-Wert.

Vllt. wäre es für den Anfang besser für dich, wenn du das Speichern der Master-Tabelle und der Detail-Tabelle über zwei verschiedene Buttons (und demnach Methoden) durchführen würdest?
AndreasK Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: So 10.03.13 16:03 
Danke für die Hilfe.