+ Start a Discussion

Using Dependent Picklist in Data Table


I wanted to use a dependent picklist in a data table. How to pass a selected value from one picklist into the controller?


Once the picklist is selected I want its value to be selected.

Edwin VijayEdwin Vijay

You will have to use the get,set methods...



<apex:selectList value="{!city}" size="1" id="values">
<apex:actionSupport event="onchange" reRender="newvalue" />
<apex:selectOptions value="{!citynames}"/>


 Controller code will be



public String city{get; set;}


 Now the variable city will be holding the value you selected in the Picklist... You can use the variable "City" in your controller for further processing...


A detailed example is available here :- Salesforce Unearthed - Dynamically add values to picklist



Hi this method works for one list on the table...I am using a datatable and there will be multiple rows and multiple picklist.

Points are


  - You need to tell the controller that which object is selected

  - You need to re-render (at least) the selected row


So, I would (did) do like this:



<apex:pageBlockTable id="table" value="{!data}" var="item">
<apex:selectList id="stateList" value="{!item.state}" size="1" id="values">
<apex:actionSupport event="onchange" action="{!changeCityList}" reRender="cityList">
<apex:param name="pid" assignTo="{!selectedId}" value="{!item.pid}">
<apex:selectOptions value="{!statenames}"/>
<apex:selectList id="cityList" value="{!item.city}" size="1" id="values">
<apex:selectOptions value="{!item.citynames}"/>




public class TheController {
public class MyObject {
public String pid {get; set;}
public String state {get; set;}
public List<String> statenames {get; set;}
public String city {get; set;}
public List<String> citynames {get; set;}

public List<MyObject> data {get; set;}
public String selectedId {get; set;}

public PageReference changeCityList(){
if(selectedId == null) return null;
for(MyObject o : data){
if(o.pid != selectedId) continue;
// update o.citynames based on state
return null;
return null;

Be careful with reRender on the controlling actionSupport ("cityList" in the sample in red).

If you want to re-render only THE ROW, you can do that. you just specify the column id because the id is relative, so if you didn't specify the entire id structure, SFDC assume it's about on the same row.

However, if user change 2 rows very quicky enough to change other row before the first call is done, the first change will be overridden because of View State conflict.

If you want to re-render the entire table, user can change only row by row, inconvenient, but safer.


I usually use record id for the row identifier and maybe I prepare for a map<id, MyObject> to get the object without loop. You can do it with lineNumber... but if your page has a function to delete a table row, it may screw it up, so I prefere to use recordid (& loop).



Message Edited by ThomasTT on 09-17-2009 10:36 AM

please help me in this bellow senario


Dynamic dependent pick list using apex :
 i created one Location__c object in that i Created two Pick Lists Country__c and State__c in Country__c pick list
i added India,pakistan valus and in state__c pick list i added Andrapradesh,Madhyapradesh,lohore,Quetta
if i select a value as India from Country__c pick list in State__c only able to see Andrapradesh,Madhyapradesh
if i select a value as pakistan from country_c picklist in state__c only able to see lohore,Quetta by using apex