我找不到关于如何将用户定义类型的数组实例转换为(C#ADO.Net)数据表的示例 - 我想使用数据表绑定到ASP.Net数据绑定控件(例如gridview) 。有人可以提供样品或推荐我一些简单的样品吗?
另一个问题是,是否必须转换为数据表才能绑定到ASP.Net中的控件?我可以绑定到任何用户定义类型的数组吗?
提前谢谢, 乔治答案 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。