如何将2维arraylist转换为数据表?

时间:2015-10-17 14:51:15

标签: vb.net arraylist datatable

我需要一个从任何arraylist(2维)作为参数返回数据表的函数?谢谢你的帮助

创建二维Arraylist:

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 

2 个答案:

答案 0 :(得分:0)

找到合适的解决方案:

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

答案 1 :(得分:0)

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