普通數據綁定通常不允許使用表達式。在數據網格下,datagrid使用反射(而不是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
。
對於額外的封裝(如果你這樣做了很多)把投影到一個擴展方法,所以你可以這樣做
var data = GetMyListOfClassAObjectsFromSomewhere().ProjectionForDataGrid();
datagrid.DataSource = data;
datagrid.DataBind();
這使用LINQ我相信這是唯一可用的後.NET 2.0。因爲我僅限於.net 2.0,還有其他方法嗎? – Dean 2008-10-08 12:54:33