You need to sign in to do that
Don't have an account?
Controller To Pass Data From More Than One Object?
I have an existing Visualforce page with a custom controller. When the code was originally written all of the data for display on the VF page was available via relationships and it was simple to gather in a single query. Business requirements have now changed and I need to get data from another object based on results from the original query. How do I combine two different query results into a single List?
My over-simplified, original code is below:
--- Visualforce Page --- <apex:page controller="cController"> <apex:pageBlockTable value="{!Data}" var="d"> <apex:column>{!d.Field_1__c}</apex:column> <apex:column>{!d.Field_2__c}</apex:column> </apex:pageBlockTable> </apex:page> --- Custom Controller --- public class cController { public Custom__c[] co = new List<Custom__c>(); public cController() { try { co = [SELECT Account__c, Field_1__c, Field_2__c FROM Custom__c]; } catch (Exception e) { //System.Debug('Exception: '+e); } } public Custom__c[] getData() { return co; } }
For lack of a better way to explain what I would like to do - here is some incorrect code:
public class cController { public sObject[] co = new List<sObject>(); public cController() { try { for (Custom__c temp : [SELECT Account__c, Field_1__c, Field_2__c FROM Custom__c]) { Contact cont = [SELECT Name FROM Contact WHERE AccountId = :temp.Account__c LIMIT 1]; co.add(temp, cont); } } catch (Exception e) { //System.Debug('Exception: '+e); } } public sObject[] getData() { return co; } }
Basically, I simply want the controller to pass back data from more than one object so I can display it together on the page. I thought I could use the generic sObject but that is proving difficult and I am not familiar with nested Lists (if that is even an option).
Any assistance would be greatly appreciated,
-greg
public class MyCustom {
public String field1 { get; set; }
public String field2 { get; set; }
public List otherItems { get; set; }
class MyOtherClass {
public String field3 { get; set; }
public String field4 { get; set; }
}
}
So then within your controller you would make the queries and fill in that collection.
You need to use a wrapper.
class AccountWrapper //this can be a inner class in your controller
{
public Id accountId {get; set;}
public String name {get; set;}
public List<ContactWrapper> contacts {get; set;}
}
//You don't need this class if the account-contact relationship is one-to-one.
class ContactWrapper //you can even have this class as a inner class in AccountWrapper
{
//declar the fields you want from contact
}
In your controller
public List<AccountWrapper> data {get; set;}
Note in your VF page, when you display the contacts you need to use nested table. Hope it helps.