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 Zitieren
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 Zitieren
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 Zitieren
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? Zitieren
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) Zitieren
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? Zitieren
TDM Geschrieben 13. Oktober 2008 Geschrieben 13. Oktober 2008 Quasi absteigend geordnet? Ja, dann zähl einfach die Zeilen rückwärts. Zitieren
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 Zitieren
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 Zitieren
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 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.