daTom Geschrieben 12. Oktober 2008 Geschrieben 12. Oktober 2008 Hallo, wie kann ich in ein DataSet nachträglich eine ID-Spalte einfügen, die von 0 beginnend hochzählt? Die Daten im DataSet kommen aus einer Datenbank und auf das Stored Procedure habe ich leider keinen Zugriff, sonst würde ich es direkt dort ändern. Ich habe leider überhaupt keinen Ansatz bislang. Danke schon mal
TDM Geschrieben 13. Oktober 2008 Geschrieben 13. Oktober 2008 (bearbeitet) Im Dataset nicht, aber in den Tabellen vom Dataset über die Cols Eigenschaft. [Edit] Wobei nicht gesagt sein muss, dass dies mit dem Primärschlüssel in der Tabelle übereinstimmt. Bearbeitet 13. Oktober 2008 von TDM
xk4fu Geschrieben 13. Oktober 2008 Geschrieben 13. Oktober 2008 jop erst addest du eine zusätzliche spalte dann machst du eine schleife, die dir deine werte jeweils um eine col nach hinten setzt und somit kannst du die erste als id verwenden
daTom Geschrieben 13. Oktober 2008 Autor Geschrieben 13. Oktober 2008 Hi, also ich habe das gerade wie folgt gelöst: DataSet ds = new DataSet(); adapter.fill(ds); DataSet newDs = new DataSet(); DataTable dt = newDs.Tables.Add(); DataColumn dataColumn = dt.Columns.Add("Nr."); dataColumn.AutoIncrement = true; foreach (DataColumn dc in ds.Tables[0].Columns) { dt.Columns.Add(dc.ColumnName); } foreach (DataRow dw in ds.Tables[0].Rows) { dt.ImportRow(dw); } Ist das so ok? Oder gibt es vielleicht noch eine elegantere Lösung?
TDM Geschrieben 13. Oktober 2008 Geschrieben 13. Oktober 2008 ich würds vielleicht eher so machen: DataSet ds = new DataSet(); adapter.fill(ds); DataTable table = ds.Tables[0]; DataColumn column = new DataColumn(); column.DataType = System.Type.GetType("System.Int32"); column.ColumnName = "Nr"; column.AutoIncrement = true; column.ReadOnly = true; //<- Nach eigenem Ermessen column.Unique = true; //<- Nach eigenem Ermessen table.Columns.Add(column)
daTom Geschrieben 13. Oktober 2008 Autor Geschrieben 13. Oktober 2008 So in der Art hatte ich mir das auch schon gedacht. Allerdings habe ich dann das Problem, dass die hinzugefugte Spalte nicht die erste Spalte ist, sondern dann die letzte Spalte ist. Oder gibt es hierfür auch ne Möglichkeit, die ich noch nicht sehe?
TDM Geschrieben 13. Oktober 2008 Geschrieben 13. Oktober 2008 Quasi absteigend geordnet? Ja, dann zähl einfach die Zeilen rückwärts.
daTom Geschrieben 13. Oktober 2008 Autor Geschrieben 13. Oktober 2008 Hm Sorry, ich kann dir gerade nicht folgen. Oder vielleicht habe ich mich falsch ausgedrückt?! Wenn ich die neue Column an die DataTable anfüge, so wie du es vorgeschlagen hast, habe ich das Problem, dass die neue Column nicht an erster Stelle steht (...Tables[0].Columns[0] - ist dann nicht meine neu angefügte Spalte) Meine Frage war, ob ich es irgendwie hinbekomme, dass die neue Spalte an Position 0 steht. Ich hoffe, das ist jetzt etwas verständlicher ausgedrückt
xk4fu Geschrieben 13. Oktober 2008 Geschrieben 13. Oktober 2008 leg doch ein tempoäreres datatable an; in dem du zuerst die id spalte hinzufügst und dann die restlichen aus dem anderen datatable
TDM Geschrieben 13. Oktober 2008 Geschrieben 13. Oktober 2008 ach so meinst du das... Ja, dann entweder wie xk4fu sagt eine temporäre DataTable benutzen oder via AddRange einen Array zusammenbasteln, der angibt wo welche Spalte ist. PS: Ich dächte den Index könnte man auch irgendwo setzen. :beagolisc
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden