Search code examples
vb.netdatatablestructuregeneric-list

How to fill a DataTable with a List(Of t) or convert a List(Of t) to a DataTable?


I have read many posts on this topic; among them and most recently .NET - Convert Generic Collection to Data Table. Unfortunately, all to no avail.

I have a generic collection of 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)

I need to fill a DataTable with this list of structures but have no idea how to go about doing this. I am using vb.net in Visual Studio 2008.

Any insights will be greatly appreciated


Solution

  • The code you linked assumes the members are declared as properties. You didn't declare properties. You can make it work with 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