【问题标题】:How to convert 2 dimensional arraylist to datatable?如何将二维数组列表转换为数据表?
【发布时间】:2015-10-17 14:51:15
【问题描述】:

我需要一个从任何数组列表(二维)作为参数返回数据表的函数?感谢您的帮助

创建二维数组列表:

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 

【问题讨论】:

  • 你知道如何创建数据表吗?
  • @ Bjørn-Roger Kringsjå,是的,我愿意 :)
  • 你知道如何循环多维数组吗?
  • 我想看看“二维数组列表”是如何创建的
  • 如果源是数据库,为什么不直接用结果填充 DataTable 呢?

标签: vb.net arraylist datatable


【解决方案1】:

找到合适的解决方案:

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】:

    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
    

    【讨论】:

      猜你喜欢
      • 2011-12-04
      • 2022-06-17
      • 2021-12-28
      • 2016-09-24
      • 2022-01-15
      • 2013-05-17
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多