Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问Gridviews边界字段中包含的类的属性_C#_Asp.net_Class_Properties - Fatal编程技术网

C# 访问Gridviews边界字段中包含的类的属性

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>() {

我想知道为什么asp.net不允许在Gridview的Boundfields中访问包含的类的属性,而它在ItemTemplates中工作

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将用于帮助其通过复合标识符递归的方法