Laden...

[gelöst] Datatable.NewRow fügt zwei weitere Rows hinzu

Erstellt von schuppsl vor 8 Jahren Letzter Beitrag vor 8 Jahren 837 Views
S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 8 Jahren
[gelöst] Datatable.NewRow fügt zwei weitere Rows hinzu

Hallo.

Ich bin aktuell am verzweifeln.

Ich fülle eine Datatable aus einer Datenbankabfrage:



 con = new SqlConnection(Properties.Settings.Default.MietkleidungConnectionString);
            string befehl = "SELECT mt.ID, mt.PersonalID, mt.Menge, mt.KleidungsID, mt.Schluesselnummer, mt.Groesse FROM miete mt";
            adap = new SqlDataAdapter(befehl, con);
            datatMiete = new DataTable("Verwaltung");
            datatMiete.Locale = System.Globalization.CultureInfo.InvariantCulture;
            adap.Fill(datatMiete);
            cmbl = new SqlCommandBuilder(adap);
            dataGridViewMiete.DataSource = datatMiete;
            datatMiete.PrimaryKey =  new DataColumn[]{datatMiete.Columns["ID"]};
            datatMiete.Columns["ID"].AutoIncrement = true;


Später im Programm füge ich in einem Event eine weitere Row der Datatable hinzu, mittlerweile auf einfachste Weise:


 DataRow row = datatMiete.NewRow();
          
            row[0] = 28;
            row[1] = 22;
            row[2] = "2";
            row[3] = "2";
            row[4] = "1";
            row[5] = "8";

            datatMiete.Rows.Add(row);

Die Datatable enthält bis dahin drei Einträge.
Die eine Row mit den Daten hier wird erfolgreich zugefügt, aber zusätzlich werden noch zwei weitere hinzugefügt!

datatMiete[3] = wie hier eingefügt
datatMiete[4] = ??? (INdex 1 ist immer 3 ??)
datatMiete[5] = INdex[0] = 29 (28+1?) aber warum?)

Ich kann mir nicht erklären woher die zwei weiteren Einträge kommen, ich füge hier doch nur eines hinzu...?


S
322 Beiträge seit 2007
vor 8 Jahren

Hallo,


datatMiete.Rows.Add(row);

ist überflüssig, meiner Meinung nach, tut "DataRow row = datatMiete.NewRow();" bereits eine leere Row anlegen.

2.298 Beiträge seit 2010
vor 8 Jahren

Hallo steffen_dec,

das ist schlicht falsch. DataTable.NewRow generiert eine neue Zeile für die angegebenen Spalten. Die Zeile wird dem DataTable aber nicht zugeordnet und muss nachträglich mit DataTable.Rows.Add() hinzugefügt werden.

Kannst dir dazu ja auch das MSDN Beispiel anschauen: DataTable.NewRow-Methode

Speziell ist es auch in den Hinweisen beschrieben:

Sie müssen die NewRow-Methode verwenden, um neue DataRow-Objekte mit demselben Schema wie DataTable zu erstellen. Nach dem Erstellen einer DataRow können Sie diese über die Rows-Eigenschaft des DataTable-Objekts der DataRowCollection hinzufügen. Wenn Sie neue Zeilen mithilfe von NewRow erstellen, müssen die Zeilen zur Datentabelle hinzugefügt oder daraus entfernt werden, bevor Sie Clear aufrufen.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 8 Jahren

Ich habe es gefunden. Ich benutze den adapter weiter oben schon für eine Zuweisung, daher sind hier wohl noch "Reste" enthalten, die mit in die DataTable geschrieben werden.
Vielen Dank.