I had a similar problem and this is my way of doing it.
When project start, i need select 1 or more "Companies" for Start:
I fill the table with a NQ with JSON return, so when a Select a Company i need this on onRowClick for do a list:
try:
# Obtener los datos actuales de la tabla en formato JSON
json_data = self.props.data
# Extrae los encabezados de las columnas del primer elemento del JSON
headers_data = list(json_data[0].keys()) if json_data else []
# Extrae las filas
filas_data = [list(row.values()) for row in json_data]
# Crea el Dataset
dataset = system.dataset.toDataSet(headers_data, filas_data)
# Fila seleccionada y dato de la tabla
sr = self.props.selection.selectedRow
data = system.dataset.toPyDataSet(dataset)
# Obtener el índice de la fila seleccionada
rowIndex = event['row']
# Verificar si el índice de la fila es válido
if rowIndex is not None:
# Obtener el valor actual de 'seleccion' en la fila seleccionada
currentValue = json_data[rowIndex]['selected']#['seleccion']
# Imprimir el valor actual en consola
#system.perspective.print("Fila {0}: 'seleccion' actual es {1}".format(rowIndex, currentValue))
id_emp = data[rowIndex]['value'] #Asi viene del dataset
lista = self.view.custom.id_emp_seleccion
#lista = self.session.custom.filtroEmpresaSeleccion.id_emp_lista
#self.view.custom.id_empresa_seleccionadas
# Cambiar el estado del check según su valor actual
if currentValue is False:
#system.perspective.print("Check estaba en Falso")
# Cambiar el estado del check a True
self.props.data[rowIndex]['selected'] = True
if not id_emp in lista:
lista.append(id_emp)
else:
#system.perspective.print("Check estaba en Verdadero")
# Cambiar el estado del check a False
self.props.data[rowIndex]['selected'] = False
#lista.remove(id_emp)
if id_emp in lista:
lista.remove(id_emp)
system.perspective.print('lista:')
system.perspective.print(lista)
In my Session Custom i need a "List of Companies" (Array)
Ex:
id_emp_lista:
[
62,
76,
3,
1,
78,
2
]
I've another Session custom for do string:
E.B:
{this.custom.filtroEmpresaSeleccion.id_emp_lista}
Transform Script:
id_emp_seleccion = value
str_return = ""
if id_emp_seleccion:
str_return += ', '.join(str(emp) for emp in id_emp_seleccion)
return str_return
Finally, i do another Sessino custom 'filtro_id_emp_select' translate to: filter_company_selected.
E.B:
{this.custom.filtroEmpresaSeleccion.id_emp_lista}
Transform Script:
id_emp_seleccion = value
cadena = "IN ("
if id_emp_seleccion:
cadena += ', '.join(str(emp) for emp in id_emp_seleccion)
cadena += ")"
return cadena
i use to much this 'filtro' for concat another filters:
I pass the filter in every query because its my principal filter based on a first selection.
Maybe is not the best way, but trust its work and i concat many string filter for pass to multiple NQ.
and isn't hard to maintain.
I hope it helps.