C#将对象数组转换为数据表

时间:2009-02-08 13:51:54

标签: c#

我找不到关于如何将用户定义类型的数组实例转换为(C#ADO.Net)数据表的示例 - 我想使用数据表绑定到ASP.Net数据绑定控件(例如gridview) 。有人可以提供样品或推荐我一些简单的样品吗?

另一个问题是,是否必须转换为数据表才能绑定到ASP.Net中的控件?我可以绑定到任何用户定义类型的数组吗?

提前谢谢, 乔治

4 个答案:

答案 0 :(得分:3)

不,您不需要DataTable来进行绑定 - 事实上,现在大多数绑定都是基于对象的,尤其是LINQ(生成对象模型,而不是DataTable)。只需使用公共属性名称(来自您的类)作为不同列的数据成员等。

答案 1 :(得分:3)

我有同样的要求,我在Pauls Blog上发现了一篇很好的文章。如果您还想要它,可以查看以下链接

http://weblogs.asp.net/psperanza/archive/2005/05/18/407389.aspx

这是我在项目中使用的代码。希望有所帮助

Public Function ConvertArrayToDatatable(ByVal arrList As ArrayList) As DataTable
    Dim dt As New DataTable
    Try
        If arrList.Count > 0 Then
            Dim arrype As Type = arrList(0).GetType()
            dt = New DataTable(arrype.Name)

            For Each propInfo As PropertyInfo In arrype.GetProperties()
                dt.Columns.Add(New DataColumn(propInfo.Name))
            Next

            For Each obj As Object In arrList
                Dim dr As DataRow = dt.NewRow()

                For Each dc As DataColumn In dt.Columns
                    dr(dc.ColumnName) = obj.GetType().GetProperty(dc.ColumnName).GetValue(obj, Nothing)
                Next

                dt.Rows.Add(dr)
            Next
        End If

        Return dt
    Catch ex As Exception
        Return dt
    End Try

End Function

答案 2 :(得分:1)

我建议使用ObjectDataSource类来做你想做的事。那么你根本不需要使用DataTable,你仍然可以获得数据绑定。 ObjectDataSource允许您将用户定义的类型公开给数据绑定,并且获取类型的方式无关紧要;如果这就是你需要的话,他们根本不需要来自数据库。

答案 3 :(得分:0)

关于评论“由于非技术原因不能使用LINQ”:

我认为你不想使用LINQ to SQL,因为你想要维护你的三层架构。但您可能不知道可以使用LINQ to Objects,这将提供您所寻求的灵活性。

假设您有一个中间层方法:List Tier2.SomeMethod()。您可以将该方法的返回值指定为GridView数据源,然后在GridView控件中指定SomeObject方法/属性:gvSomeGridView.DatasSource = Tier2.SomeMethod(); gvSomeGridView.DataBind();

此外,您可以在GridView回调中从DataItem中检索SomeObject。

HTH。