【问题标题】:how to create sections of grouped data in Vf page如何在 Vf 页面中创建分组数据的部分
【发布时间】:2012-01-17 19:00:12
【问题描述】:

我有一个包含以下数据的列表

customer name  Make      Area
Mike           honda     Chicago
Kevin          GM        Chicago
Bill           Audi      New York
roger          Suzuki    New York

我需要在 Vf 页面中显示此信息,并将区域作为部分和名称并在其下制作

New york
Roger          Suzuki    
Bill           Audi      

Chicago
Mike           honda     
Kevin          GM        

任何关于如何获得它的指示都会有很大帮助。

谢谢 普拉迪

【问题讨论】:

    标签: salesforce visualforce


    【解决方案1】:

    我可以想到两种可能的方法来做到这一点,第一种(肯定有效)是在控制器中使用包装类,如下所示:

    public class CArea
    {
        public list<Contact> liContacts {get; set;}
        public string strAreaName {get; set;}
    
        public CArea(Contact sContact)
        {
            strAreaName = sContact.City;
            liContacts = new list<Contact>{sContact};
        }
    }
    
    public list<CArea> liAreas {get; set;}
    private map<string, CArea> mapAreas = new map<string, CArea>();
    
    // **snip**
    // fill up the list: (assuming contacts)
    
    for(Contact sContact : myContactList}
    {
        if(mapAreas.get(sContact.City) == null)
        {
            mapAreas.put(sContact.City, new CArea(sContact));
            liAreas.add(mapAreas.get(sContact.City);
        }
        else
        {
            mapAreas.get(sContact.City).liContacts.add(sContact);
        }
    }
    

    现在liAreas 有一个CArea 对象列表,每个对象都包含一个联系人列表,因此您可以在页面中循环访问此列表:

    <apex:repeat var="a" value="{!liAreas}">
        <apex:outputText value="{!a.strName}"/>
        <apex:repeat var="c" value="{!a.liContacts}">
            <apex:outputText value="{!c.FirstName c.LastName}"/>
        </apex:repeat>
    </apex:repeat>
    

    选项 #2:

    这可能要简单得多,但我还没有尝试过像这样具有两个级别的动态绑定。与之前类似的设置,但使用区域地图来列出联系人:

    public map<string, list<Contact>> mapAreaToContacts {get; set;}
    

    填写这个应该很容易,与上面的代码非常相似。现在使用 支持地图和列表部分中的 Visualforce Developer's Guide 中所述的动态 Visualforce 绑定。

    祝你好运!

    【讨论】:

    • 选项 1 确实对我有用...如果我允许更新 name 或 make 的值怎么办?
    • 如果我要在 VF 页面中使用 inputfield,我应该更新哪个列表?
    • 嗨,Prady,如果您将 apex:inputFields 用于联系人字段,那么更新它们应该没有问题。在控制器中,如果您在一个地方更新了联系人,您会在另一个地方看到更新的版本(因为您有对对象的引用),不确定这是否与 VF 相关。刚刚意识到,您还可以删除代码中的 CArea 列表,然后对构建的地图使用动态绑定。可能会简化事情。
    • 我所做的是遍历所有 CAreas 并在新列表中添加联系人并更新列表。它工作得很好,也许不是最好的方法,也会尝试动态绑定.. 感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多