将动态属性添加到动态类型?

时间:2012-03-30 12:12:00

标签: asp.net .net generics binding anonymous

长话短说我必须使用动态数据(包括动态列)填充网格。将radgrid(telerik工具)绑定到匿名类型列表时,这是可能的。但我需要从数据库中读取的项目中为匿名对象添加属性。

Dim grdds2 = (From grd As PeerReviewReportByCategoryItems In GetPRReportByCategory(dpkStartDate.SelectedDate, dpkEndDate.SelectedDate, "")
             Select New With {
                .CategoryName = grd.CategoryName,
                .Total = grd.TotalCount,
                .CategoryID = grd.CategoryID,
                .Test = grd.RadiologistCountsString}
                 )

    RadGrid1.DataSource = grdds2

例如,我在这里创建一个匿名类型并将其绑定到网格,效果很好。

但是现在我需要使用从数据库中读取的名称/值向匿名类型添加属性。

这可能吗?

1 个答案:

答案 0 :(得分:1)

创建ExpandoObject(假设您使用的是.NET 4),而不是创建匿名类型。那个设计专门用于“我想动态设置一堆属性”。

如果您事先知道属性名称,只需像使用任何其他动态类型一样使用它。当您想通过变量值访问它们时(例如从数据库中读取),只需将其转换为IDictionary(Of Object, Of Object)即可设置/获取值。

编辑:正如评论中所述,这是否正确(并自动)绑定到网格将取决于RadGrid是否支持动态类型。有一些方法可以找出动态提供的属性,但是否是另一回事。