Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.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# 将子对象绑定到数据域和数据源_C#_Asp.net - Fatal编程技术网

C# 将子对象绑定到数据域和数据源

C# 将子对象绑定到数据域和数据源,c#,asp.net,C#,Asp.net,以上面的模拟类为例,我有一个动态创建的GridView。为此,我绑定(添加到Columns集合)X个BoundFields,然后将集合分配给数据源,但是,我的子对象没有绑定 BoundFields的DataField属性设置为“ClassB.Title”,数据源是类型a的对象集合,但它不断引发异常“在所选数据源上找不到名为“ClassB.Title”的字段或属性” 你知道为什么吗 欢呼这是因为BoundField使用反射来计算对象属性-显然,类A没有名为ClassB.Title的属性,因此出现了

以上面的模拟类为例,我有一个动态创建的GridView。为此,我绑定(添加到Columns集合)X个BoundFields,然后将集合分配给数据源,但是,我的子对象没有绑定

BoundFields的DataField属性设置为“ClassB.Title”,数据源是类型a的对象集合,但它不断引发异常“在所选数据源上找不到名为“ClassB.Title”的字段或属性”

你知道为什么吗


欢呼

这是因为BoundField使用反射来计算对象属性-显然,类A没有名为
ClassB.Title的属性,因此出现了问题

您可以使用模板字段来解决此问题。比如说,

class A 
{ 
  int ID; 
  B ClassB; 
}

class B 
{ 
  string Title; 
}
<asp:templatefield headertext="SomeColumn">
     <itemtemplate>
          <%#Eval("ClassB.Title")%>
     </itemtemplate>
</asp:templatefield>
<asp:templatefield headertext="SomeColumn">
     <itemtemplate>
          <%# ((A)(Container.DataItem)).ClassB.Title  %>
     </itemtemplate>
</asp:templatefield>
public class MyBoundField : BoundField
{
   protected override object GetValue(Control controlContainer)
   {
      string dataField = this.DataField;
      if (string.IsNullOrEmpty(dataField)) { return null; }
      if (!dataField.Contains('.'))
      {
         // use base implemenation
         return base.GetValue(controlContainer);
      }

      // design time support
      if (base.DesignMode)
      {
        return this.GetDesignTimeValue();
      }

      // Use data-binder to evaluate nested property look-ups
      return DataBinder.Eval(controlContainer, dataField);
   }

}