如何将二维数组列表转换为数据表?

How to convert 2 dimensional arraylist to datatable?

我需要一个 returns 数据表的函数,来自任何数组列表(2 维)作为参数?感谢您的帮助

正在创建二维数组列表:

Public Overrides Function Find(Optional ByRef conditions As ArrayList = Nothing) As System.Collections.ArrayList
    Dim collection As New ArrayList
    Dim cmd ......... ' Select command based on an arraylist of conditions
    Dim dr As SqlDataReader = cmd.ExecuteReader()
    While dr.Read()
        Dim cnt As New contact
        cnt .Id() = dr("id")
        cnt .Name= dr("name")
        '.........  other columns are imported
        collection.Add(cnt )
    End While
    dr.Close()
    Return collection
End Function 

找到合适的解决方案:

Public Shared Function ArrayListToDataTable(ByVal arraylist1 As ArrayList) As System.Data.DataTable
    Dim dt As New System.Data.DataTable()

    For i As Integer = 0 To arraylist1.Count - 1
        Dim GenericObject As Object = arraylist1.Item(i)
        Dim NbrProp As Integer = GenericObject.GetType().GetProperties().Count

        For Each item As PropertyInfo In GenericObject.GetType().GetProperties()
            Try
                Dim column = New DataColumn()
                Dim ColName As String = item.Name.ToString

                column.ColumnName = ColName
                dt.Columns.Add(column)

            Catch

            End Try
        Next

        Dim row As DataRow = dt.NewRow()

        Dim j As Integer = 0
        For Each item As PropertyInfo In GenericObject.GetType().GetProperties()
            row(j) = item.GetValue(GenericObject, Nothing)
            j += 1
        Next

        dt.Rows.Add(row)

    Next
    Return dt

End Function

2年后,我来回答这个问题=>

Function ConvertArrayListToDataTable(ByVal arraylist As ArrayList) As DataTable
        Dim dt As DataTable = New DataTable()

        If arraylist.Count <= 0 Then
            Return dt
        End If

        Dim propertiesinfo As PropertyInfo() = arraylist(0).GetType().GetProperties()

        For Each pf As PropertyInfo In propertiesinfo
            Dim dc As DataColumn = New DataColumn(pf.Name)
            dc.DataType = pf.PropertyType
            dt.Columns.Add(dc)
        Next

        For Each ar As Object In arraylist
            Dim dr As DataRow = dt.NewRow
            Dim pf As PropertyInfo() = ar.GetType().GetProperties()

            For Each prop As PropertyInfo In pf
                dr(prop.Name) = prop.GetValue(ar, Nothing)
            Next
            dt.Rows.Add(dr)
        Next
        Return dt
    End Function