Row header layer not converting position to index [message #1775723] |
Sat, 04 November 2017 01:57 |
Louis Detweiler Messages: 100 Registered: August 2017 |
Senior Member |
|
|
Hello, I have a grid layer with a custom row header data provider that allows for editing of the row headers. However, if the table is scrolled down so that some of the rows aren't visible, upon editing a row header, an earlier row header is actually updated. With some debugging I think it's because the row header data provider is being supplied with the row position instead of the row index, and doesn't do a conversion.
I think I'm doing something wrong. Here's my default grid layer construction.
DefaultGridLayer gridLayer = new DefaultGridLayer(bodyDataProvider,
new DefaultColumnHeaderDataProvider(columnNames, columnToLabelMap),
new RequirementsRowHeaderDataProvider(bodyDataProvider, requirementsList), false);
and here's my row header data provider.
public class RequirementsRowHeaderDataProvider implements IDataProvider {
/**
* The body data provider of the NatTable.
*/
private final IDataProvider bodyDataProvider;
/**
* The list of elements that the row header will represent.
*/
private EList<? extends NamedElement> elementList;
/**
* Data provider for the row labels of a NatTable.
* @param bodyDataProvider
* The bodyDataProvider for the NatTableCreator.
* @param elementList
* The list of elements that will be displayed in the NatTable.
*/
public RequirementsRowHeaderDataProvider(
IDataProvider bodyDataProvider, EList<? extends NamedElement> elementList) {
this.bodyDataProvider = bodyDataProvider;
this.elementList = elementList;
}
@Override
public int getColumnCount() {
return 1;
}
@Override
public int getRowCount() {
return this.bodyDataProvider.getRowCount();
}
@Override
public Object getDataValue(int columnIndex, int rowIndex) {
return getRowHeaderLabel(rowIndex);
}
/**
* Gets the label for a given row header cell.
* @param rowIndex
* The index of the row of the row header cell requested.
* @return
* The name of the requirement associated with the given row.
*/
public String getRowHeaderLabel(int rowIndex) {
return elementList.get(rowIndex).getName();
}
@Override
public void setDataValue(int columnIndex, int rowIndex, Object newValue) {
//Gets the element associated with the given row.
NamedElement element = elementList.get(rowIndex);
//If no changes were made, simply return
if (element.getName() != null && element.getName().equals(newValue)) {
return;
}
OperationsUtil.performOperation(new EditName(element, newValue));
}
}
Any idea what I'm missing/doing wrong to get the row header editing to work?
Thanks.
[Updated on: Sat, 04 November 2017 03:48] Report message to a moderator
|
|
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.02561 seconds