GWT:如何在对datagrid列进行排序后运行代码

时间:2013-01-10 12:29:40

标签: gwt sorting

我真的需要在完成DataGrid的整个排序后运行一些代码。特别是在显示列是按升序还是降序排列的小箭头之后,因为我需要在显示该箭头后操纵该箭头的CSS。我找不到箭头确实设置的地方。我试过这样的事情:

ListHandler<String> columnSortHandler = new ListHandler<String>(list) {
    @Override
    public void onColumnSort( ColumnSortEvent event ) {
        super.onColumnSort( event );
        // My Code here
    }
};

但代码也会在排序完成之前运行。

感谢您提出如何解决此问题的任何建议。我现在正在寻找很长一段时间但找不到任何有用的东西。

编辑:我已覆盖原始DataGrid.Resources以提供自定义箭头图片。我还有一个复杂的自定义标头AbstractCell<String>,它支持运行时操作,并使用DIV和Image进行渲染。

2 个答案:

答案 0 :(得分:0)

您可以使用CellTable.Resources操作css资源。

public interface TableResources extends CellTable.Resources {
@Source("up.png")
ImageResource cellTableSortAscending();

@Source("down.png")
ImageResource cellTableSortDescending();

@Source("MyCellTable.css")
CellTable.Style cellTableStyle();

}

MyCellTable.css中使用样式名并更改图标

答案 1 :(得分:0)

当您使用ListHandler时,可能会ListDataProvider更新CellTable 直播setRowData);因为ListDataProviderCellTable通过内部HasDataPresenter)使用Scheduler#scheduleFinally(),然后使用Scheduler#scheduleDeferred()应该足以保证你追赶他们,但是你会冒一些闪烁的风险。

您可以在自定义ListHandler flush() ListDataProvider中绕过一个scheduleFinally,然后使用scheduleFinally执行其中一个CellTable flush()(因为setRowData将在CellTable上调用{{1}}来调度命令;您的命令将在之后安排,因此将在之后运行。