I am trying to print out a Salesforce custom object database and have a filter. The filters work correctly, but the "All" filter does not show the full table as a default or when I click "All" from another filter. How can I do this?
Here is the relevant Apex code:
public string itemPickValue{get; set;}
public List<QC_Issue__c> issuesList{get; set;}
public List<QC_Issue__c> results;
public List<QC_Issue__c> getIssues() {
results = Database.query(
'SELECT Component_Category__c, Issue_Name__c, Issue_Description__c, Severity_1_Criteria__c, Severity_2_Criteria__c, Severity_3_Criteria__c, File__c FROM QC_Issue__c Order By Component_Category__c, Issue_Name__c'
);
return results;
}
public void getIssuesList() {
if(itemPickValue.equals('All')) issuesList = Database.query('SELECT Component_Category__c, Issue_Name__c, Issue_Description__c, Severity_1_Criteria__c, Severity_2_Criteria__c, Severity_3_Criteria__c, File__c FROM QC_Issue__c');
issuesList = Database.query('SELECT Component_Category__c, Issue_Name__c, Issue_Description__c, Severity_1_Criteria__c, Severity_2_Criteria__c, Severity_3_Criteria__c, File__c FROM QC_Issue__c WHERE Component_Category__c =: itemPickValue');
}
And here is the relevant Visualforce code:
<apex:pageBlock title="QC Glossary" id="qc_issues_list">
<h3>Filter by Component Category:</h3>
<br></br>
<!-->Start Filter and List<-->
<apex:selectList size="1" value="{!itemPickValue}">
<apex:actionSupport event="onchange" action="{!getIssuesList}" rerender="table"/>
<apex:selectOption itemLabel="All" itemValue="All"></apex:selectOption>
<apex:selectOption itemLabel="Animation/VFX" itemValue="Animation/VFX"></apex:selectOption>
</apex:selectList>
<br></br>
<br></br>
<apex:pageBlockTable id="table" value="{!issuesList}" var="qc" columnsWidth="10%, 5%, 50%, 10%, 10%, 10%, 10%">
<apex:column value="{!qc.Component_Category__c }"/>
<apex:column value="{!qc.Issue_Name__c }"/>
<apex:column value="{!qc.Issue_Description__c}"/>
<apex:column value="{!qc.Severity_1_Criteria__c}"/>
<apex:column value="{!qc.Severity_2_Criteria__c}"/>
<apex:column value="{!qc.Severity_3_Criteria__c}"/>
<apex:column value="{!qc.File__c}"/>
</apex:pageBlockTable>
I've made the following changes
getIssuesList
you had an if statement that if true would store the full result in issuesList
and then immediatly overwrite it in the next line with a filtered list attempting to use the category name 'All'There are various other things to point out here; but I'll leave that for now.
The result:
public String itemPickValue{get; set;}
public List<QC_Issue__c> issuesList{get; set;}
public List<QC_Issue__c> results;
public List<QC_Issue__c> getIssues() {
results = Database.query(
'SELECT Component_Category__c, Issue_Name__c, Issue_Description__c, Severity_1_Criteria__c, Severity_2_Criteria__c, Severity_3_Criteria__c, File__c FROM QC_Issue__c Order By Component_Category__c, Issue_Name__c'
);
return results;
}
public void getIssuesList() {
if(itemPickValue.equals('All')) {
issuesList = getIssues();
} else {
issuesList = Database.query('SELECT Component_Category__c, Issue_Name__c, Issue_Description__c, Severity_1_Criteria__c, Severity_2_Criteria__c, Severity_3_Criteria__c, File__c FROM QC_Issue__c WHERE Component_Category__c =: itemPickValue');
}
}