Selected rows rowindexes

I have a huge json dataset.
I can select more rows in the perspective table.

In the props.selection.data propertie I find my rows.
In the props.selection.selectedRow I find my first selected rowindex.

I want to delete all selected rows in a script.
the system.dataset.deleteRows() removes only the rows specified by index.
I dont want to loop through my full dataset because of performance issues occuring then.
How do I remove the selected jsonrows from props.selection.data from the props.data or how do I know all the rowindexes and not only the first one without the need to loop through the whole table?

1 Like

Also ran into this issue when on mobile, trying to select multiple rows. I can add the event.value object to props.selection.data but can’t figure out how to make the table visually reflect multiple selected rows without a keyboard to hold the ‘ctrl’ button.

@joostjojo, I’m having the exact same problem now. Did you ever solve your issue?

I have populated a Perspective Table with data, then will send that data in a query to a database.

My issue is I need some way of deleting multiple rows of the table before I initiate the query.

I would’ve expected the props.selection.selectedRow to either change into a list [3,8,11] or something that would indicate when more than one row is selected.

To have to loop through all the selection.data to find the indices of those rows seems painful.

@cmallonee, do you or anyone else have a workaround? Maybe this should be a feature request?

Apparently, it already is.
https://ideas.inductiveautomation.com/ignition-features-and-ideas/p/perspective-table-multi-row-selection-selectedrow-as-an-array

As a workaround, I’ve tested this and it works (for anyone that’s still interested):

# Get the table data
ds = self.parent.parent.getChild("Table").props.data

# Convert dataset to PyDataset for easier iteration
pyData = system.dataset.toPyDataSet(ds)

# Get the selectedData
selectedData = self.parent.parent.getChild("Table").props.selection.data
selRows = []

# Loop through props.selection.data and props.data to find indices of selectedRows
# selRows is the resultant list of rows (indexes) that have been selected
for i in selectedData:
	pos = 0
	for row in pyData:
		if row['ColumnName'] == i['ColumnName']:
			selRows.append(pos)
		pos += 1

# Delete rows based on selRows
ds = system.dataset.deleteRows(ds, selRows)

# Write the dataset back to the table
self.parent.parent.getChild("Table").props.data = ds

# De-select all rows in the table
self.parent.parent.getChild("Table").props.selection.selectedRow = None

I still hope they make props.selection.selectedRow return a list of rows actually selected, not just the last one.