0

I am using Page block table on visual force page and each row has radio buttons , i want to pass the value of each selected radio button , from each row on visual force page to apex Controller class.

For Now i am getting only one Value of last Row , I need Each Value of selected radio Buttons.

Visual Force Page <apex:pageBlockTable value="{!SurveyQuestions}" var="sq"> <apex:column value="{!sq.Id}"/> <apex:column value="{!sq.Name}"/> <apex:column value="{!sq.QuestionID__r.Question__c}"/> <apex:column value="{!sq.QuestionID__r.Id}" headerValue="Question ID"/> <apex:column headerValue="HiddenQuestion Id"> <apex:inputHidden value="{!sq.QuestionID__r.Id}" id="HdnQuestionID"/> </apex:column> <apex:column headerValue="Question options"> <apex:selectRadio value="{!selectedAnswer}"> <apex:selectOptions value="{!items}"/> </apex:selectRadio> </apex:column> </apex:pageBlockTable> 

Apex Controller Class

public List<SelectOption> getItems() { List<SelectOption> options = new List<SelectOption>(); options.add(new SelectOption('yes','Yes')); options.add(new SelectOption('no','No')); options.add(new SelectOption('Maybe','maybe')); return options; } public PageReference SubmitSurvey() { // Multiple Checkbox value Logic Goes Here if(selectedAnswer == 'yes'){ //Inserting The Survey Result tblSurveyResult__c SurveyResult = new tblSurveyResult__c( Name = selectedAnswer, Answer__c = 1 ); insert SurveyResult; ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'Survey Submitted Successfully')); } else if (selectedAnswer == 'no'){ ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,selectedAnswer)); } else { ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'Please Select Atleast one value')); } return null; } 
1
  • Adil found ans to your question? Commented Jan 18, 2016 at 16:54

1 Answer 1

2

You can use wrapper class here. This is the best option in your use case. I am adding some sample code taken from Salesforce docs.

public class wrapperClassController { //Our collection of the class/wrapper objects cContact public List<cContact> contactList {get; set;} //This method uses a simple SOQL query to return a List of Contacts public List<cContact> getContacts() { if(contactList == null) { contactList = new List<cContact>(); for(Contact c: [select Id, Name, Email, Phone from Contact limit 10]) { // As each contact is processed we create a new cContact object and add it to the contactList contactList.add(new cContact(c)); } } return contactList; } public PageReference processSelected() { //We create a new list of Contacts that we be populated only with Contacts if they are selected List<Contact> selectedContacts = new List<Contact>(); //We will cycle through our list of cContacts and will check to see if the selected property is set to true, if it is we add the Contact to the selectedContacts list for(cContact cCon: getContacts()) { if(cCon.selected == true) { selectedContacts.add(cCon.con); } } // Now we have our list of selected contacts and can perform any type of logic we want, sending emails, updating a field on the Contact, etc System.debug('These are the selected Contacts...'); for(Contact con: selectedContacts) { system.debug(con); } contactList=null; // we need this line if we performed a write operation because getContacts gets a fresh list now return null; } // This is our wrapper/container class. A container class is a class, a data structure, or an abstract data type whose instances are collections of other objects. In this example a wrapper class contains both the standard salesforce object Contact and a Boolean value public class cContact { public Contact con {get; set;} public Boolean selected {get; set;} //This is the contructor method. When we create a new cContact object we pass a Contact that is set to the con property. We also set the selected value to false public cContact(Contact c) { con = c; selected = false; } } } 

Visual force

<apex:page controller="wrapperClassController"> <apex:form > <apex:pageBlock > <apex:pageBlockButtons > <apex:commandButton value="Process Selected" action="{!processSelected}" rerender="table"/> </apex:pageBlockButtons> <!-- In our table we are displaying the cContact records --> <apex:pageBlockTable value="{!contacts}" var="c" id="table"> <apex:column > <!-- This is our selected Boolean property in our wrapper class --> <apex:inputCheckbox value="{!c.selected}"/> </apex:column> <!-- This is how we access the contact values within our cContact container/wrapper --> <apex:column value="{!c.con.Name}" /> <apex:column value="{!c.con.Email}" /> <apex:column value="{!c.con.Phone}" /> </apex:pageBlockTable> </apex:pageBlock> </apex:form> </apex:page> 

enter image description here

Now use this code as reference you will get all selected value in your code. You can replace the checkbox with inputradio. and it will solve your problem.

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.