Support Article
Able to select more than one results using Radio button in Grid
SA-57218
Summary
When using pagination to display multiple rows in a page, radio buttons selection does not work across pages in the repeat grid.
Error Messages
Not Applicable
Steps to Reproduce
- Create a repeating grid with page list as the source
- Include the pyRowSelected radio button as one of the columns in the grid.
- Select a row by clicking the radio button in one page.
- Navigate to the next page or any other page.
- Select a row in that page.
Root Cause
Repeat grid does not select and clear the values in the Clipboard. Hence, when pagination occurs, it may not deselect any row. The radio buttons are cleared by the client and values do not propagate to the Clipboard.
Resolution
Perform the following local-change:
Override the setOtherRadioToFalse JavaScript (JS) function provided by the repeating grid. Invoke an activity in the server to maintain the state of the radio buttons.
1. Include the following snippet in the UserWorkForm.
<script>
pega.u.d.attachOnload(function() {
if (pega.ui && pega.ui.grid) {
pega.ui.grid.prototype.setOtherRadioToFalse = function(element, event) {
var currentName = element.name;
if (typeof(element.id) == "undefined" || element.id == "")
element.id = currentName.replace(/[\d]/g, "");
var radioButtonsList = pega.util.Dom.getElementsById(element.id, this.gridDiv);
var len = radioButtonsList.length;
for (var i = 0; i < len; i++) {
if (radioButtonsList[i]) {
if (radioButtonsList[i].name != currentName) {
radioButtonsList[i].checked = false;
}
}
}
var currentRowRef = pega.ui.property.toReference(element.name);
// console.log(currentRowRef);
var activityUrl = SafeURL_createFromURL(pega.u.d.url);
activityUrl.put("pyActivity", "@baseclass.SetOtherRadioToFalse");
activityUrl.put("propRef", currentRowRef); pega.u.d.asyncRequest("POST", activityUrl);
};
}
}, true);
</script>
2. Create an activity @baseclass.SetOtherRadioToFalse on the server with a Java step. Add the below code in this step.
String propertyReference = tools.getParamValue("propRef");
// Get the property name
String propertyName = propertyReference.substring(propertyReference.lastIndexOf('.') + 1);
// Get the page list name
String rowPageRef = propertyReference.substring(0, propertyReference.lastIndexOf('.'));
String pageListRef = rowPageRef.substring(0, propertyReference.lastIndexOf('('));
int rowNumber = Integer.parseInt(rowPageRef.substring(propertyReference.lastIndexOf('(') + 1, propertyReference.lastIndexOf(')')));
// oLog.error(pageListRef + " | " + rowNumber + " | " + propertyName);
Iterator plIterator = tools.getProperty(pageListRef).iterator();
while(plIterator.hasNext()) {
ClipboardPage rowPage = ((ClipboardProperty) plIterator.next()).getPageValue();
if (rowPage.getReference().equals(rowPageRef)) {
rowPage.getProperty(propertyName).setValue(true);
} else {
rowPage.getProperty(propertyName).setValue(false);
}
}
Published July 23, 2018 - Updated October 8, 2020
Have a question? Get answers now.
Visit the Collaboration Center to ask questions, engage in discussions, share ideas, and help others.