我有这个方法:
public ActionResult dataGrid()
{
List<ExpandoObject> list = new List<ExpandoObject>();
using (OdbcCommand DbCommand = repODBC.dbConnection.CreateCommand())
{
DbCommand.CommandText = "Select * From MyTable";
OdbcDataReader reader = DbCommand.ExecuteReader();
while (reader.Read())
{
dynamic obj = new ExpandoObject();
obj.name="Peter";
obj.num=123;
obj.id=1;
list.Add(obj);
}
return View(list);
}
}
我尝试以这种方式访问数据。我使用Grid.Mvc ......:
@Html.Grid((IEnumerable<System.Dynamic.ExpandoObject>)Model).Columns(columns =>
{
columns.Add(m => m.id).Titled("ID");
columns.Add(m => m.name).Titled("Name");
columns.Add(m => m.num).Titled("OS").Filterable(true);
})
但我收到此错误: 无法将lambda表达式转换为'GridMvc.Columns.IGridColumn'类型,因为它不是委托
如何在网格中添加列以显示ExpandoObject的数据?
答案 0 :(得分:1)
你不能这样做。 IGridColumnCollection.Add
将表达式树作为参数:
IGridColumn<T> Add<TKey>(Expression<Func<T, TKey>> constraint)
dynamic
与表达树混合不好&#34;由编译器构建&#34; (由&#34;由编译器构建&#34;我的意思是表达式树不是通过Expression
类手动构建的,而是直接在源代码中构建的)
(我已经考虑过将dynamic
用于你的另一个问题:-))
现在......您可以尝试使用:
columns.Add(m => ((IDictionary<string, object>)m)["id"]).Titled("ID");
(ExpandoObject
实现(私下)接口IDictionary<string, object>
),但50%它不会工作,并且您将在运行时获得异常。但你可以试试: - )