2010-09-15 49 views
0

我不知道爲什麼asp.net不會允許訪問的GridView的綁定列包含類的財產,而它的ItemTemplate工作..訪問包含類的屬性綁定列

Class User 
{ 
Diagnosis diagnosis { get; set; } // Contained class 
} 

Class Diagnosis 
{ 
    string DiagnosisCode { get; set; } 
} 


gridview.datasource = 
    new List<User>() { 
    new User() { 
    diagnosis = new Diagnosis() { DiagnosisCode = "MALARIA" }} } 


<boundfield datafield='<#% User.diagnosis.DiagnosisCode %>' /> 

回答

0

首先,用代碼,是,您應該將DataField屬性(它是應該查看的列的名稱)設置爲應該查看的列的VALUE。在運行時,GridView將嘗試綁定到名爲「MALARIA」的用戶的字段(或者更有可能的是,它將無法確定「User」對象是否將值注入標記中)。 BoundField也不必知道包含它正在查找的屬性的對象是User類型;它會嘗試使用您指定的列的名稱進行簡單的反射式GetProperty()調用;如果失敗,該列的綁定失敗。

這些糾正後,你仍然會發現,BoundField不會反射地通過一個複合成員標識符,如「diagnostics.DiagnosisCode」本身。解決方案是在診斷上實現ICustomTypeDescriptor或ITypedList,每種方法都公開BoundField將用來幫助它遞歸化合物標識符的方法。