function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Joe HayesJoe Hayes 

Header disappears when rendered attribute is used in apex:column

Hi,

I have a visulaforce page that displays a table of records from a related list.
I have used the rendered attribute to only display certain records (rows)
This all works fine however the column headers are not showing, Would anybody be able to see why?
<apex:pageBlock title="Delegates">
    <apex:dataTable value="{!Courses__c.Delegates__r}" var="item" border="1" cellpadding="5" cellspacing="1">
       <apex:column style="width:20%" rendered="{!item.Status__c == 'Booked'}">
          <apex:facet name="header">Name</apex:facet>
                {!item.Name}
       </apex:column>
       <apex:column style="width:30%" rendered="{!item.Status__c == 'Booked'}">
          <apex:facet name="header">Signature</apex:facet>
       </apex:column>
       <apex:column style="width:20%" rendered="{!item.Status__c == 'Booked'}">
          <apex:facet name="header">Company Name</apex:facet>
                {!item.Contact__r.Account.Name}
       </apex:column>       
       <apex:column style="width:30%" rendered="{!item.Status__c == 'Booked'}">
          <apex:facet name="header">Email Address</apex:facet>
       </apex:column>       
       <apex:column rendered="{!item.Status__c == 'Booked'}">
          <apex:facet name="header">Exam Board</apex:facet>
                {!item.Exam_Board__c}
       </apex:column>
        <apex:column rendered="{!item.Status__c == 'Booked'}">
          <apex:facet name="header">Number of Days</apex:facet>
                <table border="1" cellpadding="5" cellspacing="0">
                <td>1</td>
                <td>2</td>
                <td>3</td>
                <td>4</td>
                <td>5</td>
                </table>
       </apex:column>
    </apex:dataTable>
    </apex:pageBlock>

Thanks
Joe
 
Rahul KhilwaniRahul Khilwani
Hi Joe,

I belive there is some issue with apex:datatable column rendering while using conditional rendered statements like yours. Use some concrete true and false values.

Replace :
<apex:column rendered="{!item.Status__c == 'Booked'}">
With some thing like.
<apex:column rendered="true">
You can achieve someting like this using wrapper classes.
Have a look to it.

 
Joe HayesJoe Hayes
Thanks Rahul,

I managed to sort it with this:
<apex:pageBlock title="Delegates">
    <apex:dataTable value="{!Courses__c.Delegates__r}" var="item" border="1" cellpadding="5" cellspacing="1">
       <apex:column width="20%" headerValue="Name">
       <apex:outputText value="{!item.Name}" rendered="{!IF(item.Status__c == 'Booked',true,false)}">
       </apex:outputText>
       </apex:column>
       <apex:column width="30%">
       <apex:facet name="header">Signature</apex:facet>
       <apex:outputText value="" rendered="{!IF(item.Status__c == 'Booked',true,false)}">
       </apex:outputText>
       </apex:column>
       <apex:column width="20%" headerValue="Company Name">
       <apex:outputText value="{!item.Contact__r.Account.Name}" rendered="{!IF(item.Status__c == 'Booked',true,false)}">
       </apex:outputText>
       </apex:column>
       <apex:column width="30%">
       <apex:facet name="header">Email Address</apex:facet>
       <apex:outputText value="" rendered="{!IF(item.Status__c == 'Booked',true,false)}">
       </apex:outputText>
       </apex:column>
       <apex:column width="20%" headerValue="Exam Board">
       <apex:outputText value="{!item.Exam_Board__c}" rendered="{!IF(item.Status__c == 'Booked',true,false)}">
       </apex:outputText>                
       </apex:column>
       <apex:column >
       <apex:facet name="header">Number of Days</apex:facet>
       <apex:outputText value="" rendered="{!IF(item.Status__c == 'Booked',true,false)}">
                <table border="1" cellpadding="5" cellspacing="0">
                <td>1</td>
                <td>2</td>
                <td>3</td>
                <td>4</td>
                <td>5</td>
                </table>
    </apex:outputText>
    </apex:column>
    </apex:dataTable>
    </apex:pageBlock>


It's a longer code, but it works.

Thanks

Corey TenneyCorey Tenney
I have tried your suggestions but I get various different results:
 
<apex:column id="Value_5" headervalue="{!StERDetailCol5Header}" rendered="{!NOT(ISNULL(ER.Value_5__c))}">
                        <apex:outputText value="{!ER.Value_5__c}" rendered="{!NOT(ISNULL(ER.Value_5__c))}"/> 
                    </apex:column>
                    <apex:column >
                    	<apex:facet name="header">{!StERDetailCol6Header}</apex:facet>                    
                        <apex:outputText value="{!ER.Value_6__c}" rendered="{!IF(ER.Value_6__c != '', true, false)}"/> 
                    </apex:column>
<apex:column id="Value_7" headervalue="{!StERDetailCol7Header}" rendered="{!NOT(ISNULL(ER.Value_7__c))}">
                        <apex:outputText value="{!ER.Value_7__c}" rendered="{!NOT(ISNULL(ER.Value_7__c))}"/> 
                    </apex:column>

In ER.Value_5__c I have the value of 0.  However the code above hides the header

In ER.Value_6__c I have no value (should be null).  However the header displays

In ER.Value_7__c I have no value (should be null).  The header and value do not display.

I need to hide the entire column if say ER.Value_5__c has no value.  I cannot get it to work for the life of me.