Comment remplir un DataTable avec un List (Of t) ou convertir un List (Of t) en un DataTable?
-
05-07-2019 - |
Question
J'ai lu de nombreux articles sur ce sujet. parmi eux et plus récemment, .NET - Conversion d'une collection générique en table de données . Malheureusement, tout cela en vain.
J'ai une collection générique de structures:
Private Structure MyStruct
Dim sState as String
Dim lValue as Long
Dim iLayer as Integer
End Structure
Dim LOStates As New List(Of MyStruct)
Je dois remplir une table de données avec cette liste de structures, mais je ne sais pas comment procéder. J'utilise vb.net dans Visual Studio 2008.
Toute idée sera grandement appréciée
La solution
Le code que vous avez lié suppose que les membres sont déclarés en tant que propriétés. Vous n'avez pas déclaré de propriétés. Vous pouvez le faire fonctionner avec Reflection:
Imports System.Reflection
...
Public Shared Function ConvertToDataTable(Of T)(ByVal list As IList(Of T)) As DataTable
Dim table As New DataTable()
Dim fields() As FieldInfo = GetType(T).GetFields()
For Each field As FieldInfo In fields
table.Columns.Add(field.Name, field.FieldType)
Next
For Each item As T In list
Dim row As DataRow = table.NewRow()
For Each field As FieldInfo In fields
row(field.Name) = field.GetValue(item)
Next
table.Rows.Add(row)
Next
Return table
End Function
Autres conseils
J'ai le même problème que @SamSelikoff, déplacé vers GetProperties:
Public Shared Function ConvertToDataTable(Of t)(
ByVal list As IList(Of t)
) As DataTable
Dim table As New DataTable()
If Not list.Any Then
'don't know schema ....
Return table
End If
Dim fields() = list.First.GetType.GetProperties
For Each field In fields
table.Columns.Add(field.Name, field.PropertyType)
Next
For Each item In list
Dim row As DataRow = table.NewRow()
For Each field In fields
dim p = item.GetType.GetProperty(field.Name)
row(field.Name) = p.GetValue(item, Nothing)
Next
table.Rows.Add(row)
Next
Return table
End Function
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow