进入酒店内的物业

时间:2010-09-29 17:14:43

标签: c# listview properties data-binding

我有一个如下设置

public class ProptsClass
{
    public class ClassA 
    {
        public list<ClassB> pcb { get; set; }
    }

    public class ClassB
    {
        public list<ClassC> pcc { get; set; }
    }

    public class ClassC
    { 
        public string _someproperty { get; set; }
    }
}

我想要做的是将对象ClassA数据绑定到ListView,其中一列被数据绑定到ClassC._someproperty。 当我尝试将其数据绑定为 <%#Eval("Namespace.ProptsClass.ClassA.pcb.pcc._someproperty") %>  我收到错误:“DataBinding:Namespace ProptsClass.ClassA + ClassB'不包含名为'_someproperty'的属性。”

有人可以告诉我我做错了什么,以及做正确的方法是什么。其次是有更好的方法可以在后面的代码而不是ASP.net中实现相同的功能。 提前致谢

1 个答案:

答案 0 :(得分:4)

ListViews和GridViews上的DataBind仅对要绑定列的属性/字段名称进行“浅层”搜索。此外,它不会“压扁”您在结构中的列表列表。如果要绑定到多级对象模型,则需要通过“传递”属性在父级上公开子属性,或者将要显示的值投影到“视图”的一维集合中 - 帮助“上课。我会选择后者,因为你想要多维访问元素的价值。

试试这个:

var displayResult = theProptsClass.A.pcb.SelectMany(b=>b.pcc).Select(c._someproperty);

SelectMany()函数用于“展平”ClassB和ClassC之间的关系,并且与Select()结合将返回一个A中所有B中所有C的所有_someproperty值。您可以链接另一个SelectMany()调用如果你有一个As的集合,你需要从中收集Bs的平面集合。