Wer aus welchem Grund auch immer einmal vor dem Problem steht eine Liste in ein DataTable konvertieren zu müssen, kann folgendes Code Snippet verwenden:
1: Public Function ConvertListToDataTable(objects As System.Collections.IList)
As DataTable Implements cwContracts.IConverter.ConvertListToDataTable
2: Dim dataTable As New DataTable
3:
4: If objects IsNot Nothing AndAlso objects.Count > 0 Then
5: 'Erzeuge Spalten aus den Properties des Objekts
6: Dim objectProperties = objects(0).GetType.GetProperties()
7: For Each prop In objectProperties
8: Try
9: dataTable.Columns.Add(prop.Name, prop.PropertyType)
10: Catch ex As NotSupportedException
11: dataTable.Columns.Add(prop.Name)
12: End Try
13: Next
14:
15:
16: 'Erzeuge die DataRows und fülle die passenden Objektwerte in die
passenden Spalten
17: Dim newRow = dataTable.NewRow
18:
19: For Each item In objects
20: newRow = dataTable.NewRow()
21:
22: For Each prop In item.GetType.GetProperties()
23: newRow(prop.Name) = prop.GetValue(item, Nothing)
24: Next
25:
26: dataTable.Rows.Add(newRow)
27: Next
28: End If
29:
30: Return dataTable
31: End Function
Mit einem Converter könnt ihr das auch in C# Code konvertieren.
Beachtet, dass ihr das try-catch in Zeile 8-12 nur verwenden müsst, wenn in der Liste Nullable Values sein können. Das wäre beispielsweise der Fall, wenn ihr mit dem Entity Framework bzw. LINQ auf eine Datenbanktabelle zugegriffen habt, die Felder beinhaltet, die null sein dürfen. Wenn es euch nicht wichtig ist, dass die Columns im DataSet typisiert sind, könnt ihr auch einfach nur Zeile 11 verwenden.
Kommentar verfassen