Laden...

DataTable.AutoIncrement

Erstellt von Paratrooper vor 19 Jahren Letzter Beitrag vor 19 Jahren 2.452 Views
Paratrooper Themenstarter:in
22 Beiträge seit 2004
vor 19 Jahren
DataTable.AutoIncrement

Hi,

probiert mal folgendes aus:

Window-Projekt anlegen.
DataGrid erzeugen (heißt bei mir dg).

Instanzvariable erzeugen:
System.Data.DataTable dt = new DataTable();

Im Konstruktor folgendes eingeben:
this.dt.Columns.Add("Nr.", System.Type.GetType("System.Int32"));
this.dt.Columns[0].ReadOnly = true;
this.dt.Columns[0].AutoIncrement = true;
this.dt.Columns.Add("Produkt");
this.dg.DataSource = this.dt;

Projekt starten.

Mir ist folgendes aufgefallen: Ich kann im DataGrid Daten eingeben. Es wird auch richtig mitgezählt (0, 1, 2, 3, 4 usw.).
Wenn ich nun mit der Pfeil-Taste eine Zeile nach oben gehe und dann wieder eine nach unten, stimmt die Nummerierung nicht mehr.
Beispiel: Ich gebe irgend etwas ein und drücke ENTER. DataGrid erzeugt eine neue Zeile. In der Spalte "Nr." steht jetzt ne 1. Ich gehe mit der Pfeiltaste nach oben und dann wieder nach unten. Nun steht in der zweiten Zeile eine 2 obwohl eine 1 stehen müßte (nach 0 kommt die 1). Komisch...

Wie bringe ich C# bei, richtig zu Zählen?

Servus...
Paratrooper.

S
127 Beiträge seit 2004
vor 19 Jahren

Das DataGrid sollte das Ereignis "CurrentRowChanged" (oder so ähnlich) werfen, dort kannst du auch glleich schauen ob sinnvolle Werte eingegebn wurden. Aber wichtiger ist das hier ein AcceptChanges() von der Tabelle aufgerufen wird. Damit werden alle Änderungen für endgültig übernohmen.

Könnte aber später zu einem Problem werden, wenn du die Daten in eine Datenbank speichern willst.

Paratrooper Themenstarter:in
22 Beiträge seit 2004
vor 19 Jahren

Hi Sunny,

Danke für die Tipps.
Ich habe das Problem trotzdem nicht lösen können.

Da ich die Daten in eine XML-Datei speichern will (DataSert.WriteXML), laufe ich kurz vorm Speicher die Tabelle durch und sorge für eine korrekte Nummerierung (Ist zwar nicht die feine englische Art aber immerhin eine Lösung).

Servus...
Paratrooper.

PS: Das Ereignis "CurrentRowChanged" wir im DataTable und nicht in DataGrid ausgelöst.