普通数据绑定通常不允许表达式。在后台,数据网格使用反射(而不是像 DataBinder.Eval 在 ASP.NET 页面上那样执行代码)来查找您指定绑定到列的属性。要执行您想要的操作,需要将绑定评估为表达式,确定您正在寻找父 -> 子关系,然后反映到该级别。AFAIK 网格上的内置数据绑定太笨了,不知道该怎么做。
我最近遇到了同样的问题,我的解决方案是进行 LINQ 投影并将其绑定到网格。类似于以下内容(在 C# 中,因为我对 VB 中的 LINQ 语法不满意):
IList<ClassA> listOfClassAObjects = GetMyListOfClassAObjectsFromSomewhere();
var projection = from ClassA a in listOfClassAObjects
select new { SomeProperty = a.SomeProperty,
SomeOtherProperty = a.SomeOtherProperty,
SomePropertyFromB = a.ClassB.SomeProperty };
datagrid.DataSource = projection;
datagrid.DataBind();
您将获得包含该投影的匿名类型列表,并且可以将相应的列绑定到SomePropertyFromB
.
For extra encapsulation (if you do this a lot) put the projection into an extension method so you can do something like
var data = GetMyListOfClassAObjectsFromSomewhere().ProjectionForDataGrid();
datagrid.DataSource = data;
datagrid.DataBind();