gpt4 book ai didi

c# - 将子对象绑定(bind)到 DataField 和 DataSource

转载 作者:太空狗 更新时间:2023-10-29 22:20:13 24 4
gpt4 key购买 nike

class A 
{
int ID;
B ClassB;
}

class B
{
string Title;
}

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

BoundFields 的 DataField 属性设置为“ClassB.Title”,DataSource 是 A 类型对象的集合,但它不断抛出异常“未找到名称为‘ClassB.Title’的字段或属性在选定的数据源上。”

有什么想法吗?

干杯

最佳答案

这是因为 BoundField 使用反射来评估对象属性 - 显然,类 A 没有名为 ClassB.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>

注意将数据项类型转换为您的特定类 (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);
}

}

关于c# - 将子对象绑定(bind)到 DataField 和 DataSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7722634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com