使用 ListGrid,当需要排序时,当然可以用上移下移这样的button来做排序。
不过,既然SmartGWT 支持鼠标的Drag and Drop排序,何乐而不为呢。
首先,要 setCanReorderRecords( true),这样才能支持鼠标拖拽排序。
其次,要将顺序持久化,就要将当前的顺序保存到服务端。ListGrid 有个
addRecordDropHandler,本来想用这个,后来一看,这个是在drop
之前调用的,这个时候还不知道drop之后的顺序,所以不行。后来找到
了一个 addDragStopHandler,终于是在排序之后调用的。接下来就
简单了,直接上代码:
final DataSource ds = DataSource.get( "node");
nodesGrid.setShowAllRecords( true);
nodesGrid.setCanReorderRecords( true);
nodesGrid.setSortField( "index");
nodesGrid.addDragStopHandler( new DragStopHandler() {
@Override
public void onDragStop(DragStopEvent event) {
final ListGridRecord[] records = nodesGrid.getRecords();
for ( int i=0; i<records.length;i++) {
final ListGridRecord record = records[ i];
System.out.println( record.getAttribute( "name"));
record.setAttribute( "index", i);
nodesGrid.updateData( record);
}
}
});
这样做还有个小问题,不是批量保存的,会影响效率,有待改进。