2009-11-26 59 views
5

我已阅读关于此主题的许多帖子;其中包括最近的.NET - Convert Generic Collection to Data Table。不幸的是,一切都无济于事。如何用列表(Of)填充DataTable或将列表(Of)转换为DataTable?

我有结构的泛型集合:

Private Structure MyStruct 
Dim sState as String 
Dim lValue as Long 
Dim iLayer as Integer 
End Structure 

Dim LOStates As New List(Of MyStruct) 

我需要填写与结构的此列表的DataTable,但不知道如何去这样做。我使用vb.net在Visual Studio 2008中

任何见解将不胜感激

回答

11

您链接的代码假定成员被声明为属性。你没有声明属性。你可以把它与反思工作:

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 
+0

nobugz,谢谢你,这么迅速回应!我将这个函数添加到我的类中,然后将它传递给结构列表(oTable = ConvertToDataTable(LOStates)),但没有重新生成行 - 表计数= 0,然后返回到从其调用的位置。我想知道是否有其他东西,我失踪或做错了... – 8thWonder 2009-11-27 16:57:19

+0

调试它。为每个循环做循环?表格是否有任何列? – 2009-11-27 17:03:08

+0

它是在调试中,我能够确定表计数= 0。确实为每个循环循环。在执行return table语句之前有3个coumns,但有0行。 – 8thWonder 2009-11-27 18:36:40

1

我比@SamSelikoff同样的问题,转移到的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