Rubrik: Datenbanken · DataSet/DataTable | VB-Versionen: VB2005, VB2008 | 09.07.08 |
Transponieren einer DataTable Die Funktion transponiert eine Datatable, d.h., Spalten werden zu Zeilen und Zeilen zu Spalten. | ||
Autor: Dietrich Herrmann | Bewertung: | Views: 15.024 |
ohne Homepage | System: Win2k, WinXP, Win7, Win8, Win10, Win11 | kein Beispielprojekt |
Für ein Projekt benötigte ich eine Lösung, dass Daten in eine Datentabelle mittels Datagridview eingebbar sein sollten, aber dann in einem Datagridview in anderer Ansicht, also transponiert, ausgegeben werden.
Nun, dieser Fall eignet sich wohl wirklich nur für 'relativ kleine' Datentabellen, demnach nur für etwas spezielle Einsatzfälle.
Dafür entwickelte ich die folgende Funktion:
' Transponieren einer Datatable ' newName- der Name der neuen Datatable ' dt- die zu transponierende Datatable ' anfCol- Steuerparameter (-1 heißt, die neuen Spalten werden durchnummeriert; ' 0 heißt, es wird die erste Spalte für die neuen Spaltenheader verwendet Public Function transposeDatatable(ByVal newName As String, _ ByVal dt As DataTable, _ Optional ByVal anfCol As Short = -1) As DataTable Dim table As New DataTable(newName) Dim r As DataRow Dim ak As Short If anfCol < 0 Then ak = 0 Else ak = 1 ' neue Spalten durchnummerieren For i As Integer = 0 To dt.Rows.Count - ak If anfCol < 0 Then table.Columns.Add(i.ToString) Else table.Columns.Add(dt.Rows(i).Item(anfCol)) End If Next i ' Zeilen aus Spalten zusammenstellen For k As Integer = ak To dt.Columns.Count - 1 r = table.NewRow() r(0) = dt.Columns(k).ToString If anfCol < 0 Then For j As Integer = 1 To dt.Rows.Count r(j) = dt.Rows(j - 1)(k) Next j Else For j As Integer = 0 To dt.Rows.Count - ak r(j) = dt.Rows(j)(k) Next j End If table.Rows.Add(r) Next k Return table End Function