Forum: PC-Programmierung C# Wie funktioniert Readonly in DataTable?


von Mathias B. (matthiasbuerkle)


Lesenswert?

Hallo,

ich habe heute zum ersten Mal mit einer DataTable in C# (Visual Studio 
2010) gearbeitet. Oft habe ich in der ersten Spalte eine eindeutige ID 
der Tabellen. Da ich diese so eingestellt habe, dass der Wert bei neuen 
Zeilen automatisch inkrementiert wird, wollte ich diese Spalte als 
Readonly einstellen.
Wenn ich aber eine neue Zeile anfuege, muss ich einen Wert fuer diese 
Zelle uebergeben und dieser wird auch noch in die Zelle geschrieben. Die 
automatische Inkrementieren erfolgt hier bei nicht.

Kann mir jemand einen Tipp dazu geben?
Danke

von Christoph (Gast)


Lesenswert?

Hallo Matias,

mit
1
            DataColumn dc = new DataColumn("Eins");
2
            dc.AutoIncrement = true;
3
            dc.AutoIncrementStep = 1;
4
            dc.ReadOnly = true;
5
            dt.Columns.Add(dc);

wird die erste Spalte problemlos incrementiert.

Wie fügst du die neuen Zeilen denn hinzu?
Ich mache das ganze immer über:
1
                DataRow dr = dt.NewRow();
2
                dr["Zwei"] = "Test";
3
                dt.Rows.Add(dr);

dt ist in diesem Fall meine DataTable.

Viele Grüße,
Christoph

von Mathias B. (matthiasbuerkle)


Lesenswert?

Hi Christoph,

sorry fuer die verspaetete Antwort.

Danke fuer deine Info.
Das AutoInkrement funktioniert mittlerweile. Allerdings nicht wie 
erwartet. Ich bin davon ausgegangen, dass die "autoinkrementierte" ID um 
den Wert in AutoIncrementStep inkrementiert wird. Allerdings habe ich 
zwischen meinen IDs zum Teil eine Inkrementierung von mehr als 100. Ich 
kann mir das Verhalten anhand meines Codes noch nicht erklaeren.

Wenn ich eine neue Zeile in eine Tabelle einfuege, weisse ich der 
"autoinkrement" Zellen selbst ja keinen Wert zu.

Prinzipiell ist das kein Problem, da es sich sowieso nur im eine ID 
handelt, mit der der Anwender nie arbeitet. Aber ich weiss noch nicht, 
wie sich die Inkrementierung zukuenftig verhaelt und will nicht, dass 
damit ein Overflow ausgeloest wird.

Vielen Dank
Mathias

von Christoph (Gast)


Lesenswert?

Hi Mathias,

... und jetzt hab ich etwas länger gebraucht um zu antworten.. ;)

da fällt mir jetzt leider nichts mehr zu ein. Zumindest nichts, ohne 
einen Einblick in den Code zu haben.

Die einzige Idee wäre noch, dass deine Autoincrement-Spalte den falschen 
Datentyp hat, wobei ich mir da nicht sicher bin, ob das ganze dann 
überhaupt funktionieren würde. Außerdem erklärt das dann trotzdem nicht 
dieses merkwürdige Verhalten.
Prüfe aber vielleicht auch mal den AutoIncrementSeed, da hab ich zwar 
selbst noch nie was mit gemacht, aber kann ja sein.

Du hast ja sicherlich mal durch den Code debuggt, gab es da vielleicht 
irgendwelche hilfreichen Erkenntnisse?

Viele Grüße,
Christoph

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.