当前位置:  开发笔记 > 编程语言 > 正文

GridView与嵌套类的Properties绑定

如何解决《GridView与嵌套类的Properties绑定》经验,为你挑选了2个好方法。

我有一个类似于下面列出的对象图.当我尝试在GridView中绑定NestedClass的属性时,我得到错误:

"在所选数据源上找不到名为'NestedClass.Name'的字段或属性."

GridView绑定到ObjectDataSource,ObjectDataSource绑定到一个完全填充的BoundClass实例.

有没有办法解决?

样本类:

public class BoundClass
{
    public string Name { get; set; }
    public NestedClass NestedClass { get; set; }
}

public class NestedClass
{
    public string Name { get; set; }
}

Evan.. 54

只能在BoundField列中显示实例的直接属性.

必须在itemtemplate中使用DataBinder.Eval来访问嵌套属性,而不是将其分配给boundfield.

例:


    
        

<%#DataBinder.Eval(Container.DataItem, "NestedClass.Name")%>

或者,您可以创建一个继承BoundField的自定义类,并覆盖GetValue以使用DataBinder.Eval,如本博文中所述:

http://web.archive.org/web/20120121123301/http://iridescence.no/post/FixingBoundFieldSupportforCompositeObjects.aspx



1> Evan..:

只能在BoundField列中显示实例的直接属性.

必须在itemtemplate中使用DataBinder.Eval来访问嵌套属性,而不是将其分配给boundfield.

例:


    
        

<%#DataBinder.Eval(Container.DataItem, "NestedClass.Name")%>

或者,您可以创建一个继承BoundField的自定义类,并覆盖GetValue以使用DataBinder.Eval,如本博文中所述:

http://web.archive.org/web/20120121123301/http://iridescence.no/post/FixingBoundFieldSupportforCompositeObjects.aspx


断链的机器人:http://web.archive.org/web/20120121123301/http://iridescence.no/post/FixingBoundFieldSupportforCompositeObjects.aspx

2> Sjoerd..:

BoundField调用的这个扩展DataBinder.Eval(),它支持嵌套属性:

public class BetterBoundField : BoundField
{
    protected override object GetValue(Control controlContainer)
    {
        if (DataField.Contains("."))
        {
            var component = DataBinder.GetDataItem(controlContainer);
            return DataBinder.Eval(component, DataField);
        }
        return base.GetValue(controlContainer);
    }
}

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有