Hi,
Javadocs for com.smartgwt.client.widgets.grid.events.CellSelectionChangedEvent.cancel() say
but the selected style *is* applied on the cell after cancel.
repro on SNAPSHOT_v8.3d_2012-09-17/Pro and SNAPSHOT_v8.3d_2012-10-11/Pro.
This code will enable a button when cells in row 1 are selected, not when cells in row 0 are selected. When you click a cell in row 0, the button stays disabled (so the cancel() succeeded), but the cell's selected style itself is applied (NOK).
* I also notice some redraw problems when I click the "select row 40 button". When I hover over the row with the mouse, the selected style is applied.
* What I wanted to investigate is what happens when I hit CTRL+A. Then I guess only 1 event is thrown instead of one event for each cell. So I guess I can't cancel the selections for row 0 that way and must manually deselect them. Or is there a better way?
thanks,
Javadocs for com.smartgwt.client.widgets.grid.events.CellSelectionChangedEvent.cancel() say
Calling this method will prevent the GridRenderer styling from being updated to reflect the selection change.
repro on SNAPSHOT_v8.3d_2012-09-17/Pro and SNAPSHOT_v8.3d_2012-10-11/Pro.
This code will enable a button when cells in row 1 are selected, not when cells in row 0 are selected. When you click a cell in row 0, the button stays disabled (so the cancel() succeeded), but the cell's selected style itself is applied (NOK).
Code:
final ListGrid grid = new ListGrid();
grid.setWidth(200);
grid.setHeight(100);
String fieldName1 = "a";
String fieldName2 = "b";
ListGridField field1 = new ListGridField(fieldName1);
ListGridField field2 = new ListGridField(fieldName2);
grid.setFields(field1, field2);
ListGridRecord [] records = new ListGridRecord[100];
for (int i=0; i<records.length; i++) {
records[i] = new ListGridRecord();
records[i].setAttribute(fieldName1, "aha" + i);
records[i].setAttribute(fieldName2, "oho" + i);
}
grid.setRecords(records);
HLayout buttons = new HLayout();
IButton select = new IButton("select row 40");
select.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
grid.selectSingleRecord(40);
grid.scrollToRow(40);
}
});
final IButton doSomething = new IButton("do something");
doSomething.setDisabled(true);
buttons.setMembers(select, doSomething);
grid.setCanEdit(false);
grid.setShowRollOver(false);
grid.setShowSelectedStyle(true);
grid.setCanSelectCells(true);
grid.setCanSelectAll(true);
grid.addCellSelectionChangedHandler(new CellSelectionChangedHandler() {
public void onCellSelectionChanged(CellSelectionChangedEvent event) {
SC.logInfo("onCellSelectionChanged started");
int[][] ee = event.getCellList();
for (int i=0; i<ee.length; i++) {
SC.logInfo("event for cell (" + ee[i][0]+","+ee[i][1]+")");
}
for (int i=0; i<ee.length; i++) {
if (ee[i][1] == 0) {
// don't allow selections in the first column
// CTRL+A sends 1 event
event.cancel();
return;
}
}
// enable/disable action button when there are valid cells selected
CellSelection cellSelection = grid.getCellSelection();
doSomething.setDisabled(!cellSelection.anySelected());
}
});
VLayout layout = new VLayout();
layout.setWidth100();
layout.setHeight(600);
layout.setMembers(grid, buttons);
* What I wanted to investigate is what happens when I hit CTRL+A. Then I guess only 1 event is thrown instead of one event for each cell. So I guess I can't cancel the selections for row 0 that way and must manually deselect them. Or is there a better way?
thanks,
Comment