class A
{
int ID;
B ClassB;
}
class B
{
string Title;
}
Run Code Online (Sandbox Code Playgroud)
使用上面的模拟类作为示例 - 我有一个动态创建的GridView.为此我绑定(添加到Columns集合)X数量的BoundFields,然后将一个集合分配给DataSource,但是,我的子对象没有绑定.
在绑定列的数据区域属性设置为"ClassB.Title"和数据源是A型的对象的集合,但它不断抛出异常"的字段或属性名称为'ClassB.Title’未选定的发现数据源. "
有什么想法?
干杯
Vin*_*ayC 12
这是因为BoundField使用反射来评估对象属性 - 显然,类A没有调用属性ClassB.Title,因此也没有问题.
您可以使用模板字段来解决此问题.例如,
<asp:templatefield headertext="SomeColumn">
<itemtemplate>
<%#Eval("ClassB.Title")%>
</itemtemplate>
</asp:templatefield>
Run Code Online (Sandbox Code Playgroud)
请注意,您可以使用强类型表达式,而不是使用下面的典型模板字段标记
<asp:templatefield headertext="SomeColumn">
<itemtemplate>
<%# ((A)(Container.DataItem)).ClassB.Title %>
</itemtemplate>
</asp:templatefield>
Run Code Online (Sandbox Code Playgroud)
请注意数据项的类型转换为您的特定类(A).
编辑:另一个替代方案是构建自己的BoundField,可以进行嵌套属性查找 - 例如:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5678 次 |
| 最近记录: |