You need to sign in to do that
Don't have an account?
Shephali Swarnkar
How to show only one table a time based link clicked
Hi All,
Below is my code which shows the table contents based on link clicked.But here it shows both the table. My requirement is to show only one table at a time and hide another one and also initially the pageblock shows the blank structure of the pageblocktable initially.Is there any way to avoid such things too???
<apex:page controller="RerenderController">
<apex:form >
<apex:pageBlock >
<apex:pageBlockTable value="{!num_con}" var="cn" id="p1" >
<apex:column value="{!cn.Name}" />
<apex:column value="{!cn.Account.Name}"/>
<apex:column value="{!cn.Email}"/>
<apex:column value="{!cn.mobilephone}"/>
</apex:pageBlockTable>
<apex:pageBlockTable value="{!num_con}" var="cn" id="p2">
<apex:column value="{!cn.Name}"/>
<apex:column value="{!cn.Account.Name}"/>
<apex:column value="{!cn.Email}"/>
<apex:column value="{!cn.mobilephone}"/>
<apex:column value="{!cn.phone}"/>
<apex:column value="{!cn.Contact_Type__c}"/>
</apex:pageBlockTable>
<apex:commandLink action="{!created_con}" value="table1" reRender="p1"/>
<apex:commandLink action="{!createdpros}" value="table2" reRender="p2"/>
</apex:pageblock>
</apex:form>
</apex:page>
==========================Controller=====================
public class RerenderController
{
public List<contact> num_con {get;set;}
public void created_con()
{
num_con = [select name, account.name, mobilephone, phone, Contact_Type__c, Email from contact];
}
public void createdpros()
{
num_con = [select Name, Email, MobilePhone, Account.Name, Phone, Contact_Type__c from Contact where Contact_Type__c='prospect' and owner.alias='myada'];
}
}
Below is my code which shows the table contents based on link clicked.But here it shows both the table. My requirement is to show only one table at a time and hide another one and also initially the pageblock shows the blank structure of the pageblocktable initially.Is there any way to avoid such things too???
<apex:page controller="RerenderController">
<apex:form >
<apex:pageBlock >
<apex:pageBlockTable value="{!num_con}" var="cn" id="p1" >
<apex:column value="{!cn.Name}" />
<apex:column value="{!cn.Account.Name}"/>
<apex:column value="{!cn.Email}"/>
<apex:column value="{!cn.mobilephone}"/>
</apex:pageBlockTable>
<apex:pageBlockTable value="{!num_con}" var="cn" id="p2">
<apex:column value="{!cn.Name}"/>
<apex:column value="{!cn.Account.Name}"/>
<apex:column value="{!cn.Email}"/>
<apex:column value="{!cn.mobilephone}"/>
<apex:column value="{!cn.phone}"/>
<apex:column value="{!cn.Contact_Type__c}"/>
</apex:pageBlockTable>
<apex:commandLink action="{!created_con}" value="table1" reRender="p1"/>
<apex:commandLink action="{!createdpros}" value="table2" reRender="p2"/>
</apex:pageblock>
</apex:form>
</apex:page>
==========================Controller=====================
public class RerenderController
{
public List<contact> num_con {get;set;}
public void created_con()
{
num_con = [select name, account.name, mobilephone, phone, Contact_Type__c, Email from contact];
}
public void createdpros()
{
num_con = [select Name, Email, MobilePhone, Account.Name, Phone, Contact_Type__c from Contact where Contact_Type__c='prospect' and owner.alias='myada'];
}
}
Please change your Vf page and controller class code as below :
VF Page :
Controller Class :
Let me know if you have any issue.
Thanks,
Abhishek
All Answers
Please change your Vf page and controller class code as below :
VF Page :
Controller Class :
Let me know if you have any issue.
Thanks,
Abhishek
Thanks a lot...!!!!
Its working well but can we do the same thing using any standard variable because i have 8 such table so having variable for each and defining true and false is somehow wil increase the lines of code.
You cannot control the visibility of multiple table with a single boolean variable.
But you can achieve this with the help of a String Variable like below :
public String showTable {get;set;}
In Constructor initialize this variable as :
showTable = 'Hide All'
In each of your methods change this String to :
showTable = 'Show Pros Table';
Or
showTable = 'Show Cons Table';
In VF page change the rendered condition as below :
For table 1 rendered="{!If(showTable == 'Show Cons Table',true,false)}"
For table 2 rendered="{!If(showTable == 'Show Pros Table',true,false)}"
This is the only way to handle visibility with single varibale.
Let me know if you need more help.
Thanks,
Abhishek
Thats working too.
this is my code:
<apex:pageBlock id="pb1">
<apex:pageBlockTable value="{!num_con}" var="cn" rendered="{!If(showTable == 'contacts',true,false)}">
<apex:column headerValue="Contact Name">
<apex:commandLink value="{!cn.Name}" reRender="block1">
<apex:param name="p1" value="{!cn.ID}"/>
</apex:commandLink>
</apex:column>
<apex:column value="{!cn.Account.Name}"/>
<apex:column value="{!cn.Email}"/>
<apex:column value="{!cn.mobilephone}"/>
</apex:pageBlockTable>
</apex:pageBlock>
<apex:pageBlock id="block1">
<apex:detail subject="{!$CurrentPage.parameters.p1}" relatedList="false"/>
</apex:pageBlock>
The above code is not working properly, as showing detail record for one click but when clicking second time on any of the link it doesnot show any data.but when i remove the attribute-> rendered="{!If(showTable == 'contacts',true,false)}" It works but also showing the table structure initially which i need to avoid.
i tried rendered="{!(num_con.size >0)}"
throwing error: The value 'null' is not valid for operator '>'
Error is in expression '{!(num_con.size >0)}' in component <apex:pageBlockTable> in page.....
how to achieve this...??? that not showing the table structure intially but and showing the detail records for each link.
can you suggest me to resolve this???
It would be easy to help you if you can contact me on either gmail or skype :
Gmail : abhibansal2790@gmail.com
Skype : abhishek.bansal2790
Thanks,
Abhishek