C# 访问Gridviews边界字段中包含的类的属性
我想知道为什么asp.net不允许在Gridview的Boundfields中访问包含的类的属性,而它在ItemTemplates中工作C# 访问Gridviews边界字段中包含的类的属性,c#,asp.net,class,properties,C#,Asp.net,Class,Properties,我想知道为什么asp.net不允许在Gridview的Boundfields中访问包含的类的属性,而它在ItemTemplates中工作 Class User { Diagnosis diagnosis { get; set; } // Contained class } Class Diagnosis { string DiagnosisCode { get; set; } } gridview.datasource = new List<User>() {
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 %>' />
首先,按照代码的原样,将DataField属性(它应该查看的列的名称)设置为它应该查看的列的值。在运行时,GridView将尝试绑定到名为MALARIA的用户上的字段,或者更可能的是,它无法确定用户对象首先要将值注入标记中的内容。BoundField也不必知道包含它要查找的属性的对象是User类型的;它将尝试使用您指定的列名称进行简单的反射GetProperty调用;如果失败,则该列的绑定失败 纠正这些错误后,您仍然会发现BoundField不会通过diagnosis.DiagnosisCode这样的复合成员标识符反射递归。解决方案是在诊断时实现ICustomTypeDescriptor或ITypedList,其中每个都公开BoundField将用于帮助其通过复合标识符递归的方法