2013-01-10 32 views
0

我真的需要在DataGrid的整個排序完成後運行一些代碼的可能性。特別是在顯示列是排序升序還是降序的小箭頭之後,因爲我需要在顯示這個箭頭後操縱這個箭頭的CSS。我找不到真正設置箭頭的地方。我試過這樣的事情:GWT:如何在對數據網格列進行排序後運行代碼

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

但代碼在排序完成前也運行。

感謝您的任何建議如何解決這個問題。我正在尋找很長時間,但找不到任何有用的東西。

編輯:我已經覆蓋原來的DataGrid.Resources提供自定義的箭頭圖片。我還有一個複雜的自定義頭文件AbstractCell<String>,它支持運行時操作並使用DIV和圖像進行渲染。

+1

你需要做什麼樣的風格操作?難道你不能簡單地使用自定義'cellTableSortedHeaderAscending'和'cellTableSortedHeaderDescending'風格提供一個自定義'CellTable.Resources',可能與'setColumnStyleName'結合? –

+0

@ThomasBroyer我的表格和標題是非常自定義的,我已經覆蓋了原始DataGrid的資源和樣式,但需要通過DOM訪問帶有箭頭圖像的DIV容器。 – N43

回答

0

由於您使用的是ListHandler,因而可能是一個ListDataProvider將更新CellTable現場setRowData);因爲ListDataProviderCellTable通過內部HasDataPresenter)使用Scheduler#scheduleFinally(),然後使用Scheduler#scheduleDeferred()應該足以保證你在他們之後運行,但是然後你會冒一些閃爍的風險。

您可以在您的自定義ListHandlerflush()ListDataProvider,這將繞過一個scheduleFinally,然後使用scheduleFinally執行後CellTable(因爲flush()會調用setRowDataCellTable將調度命令的一個;你的命令WIL被安排在之後,所以會在之後運行)。

+0

flush()的可能性聽起來不錯,但是我怎樣才能使用這個'flush()'調度類似'DOM.getElementById(getElementId())。getParentElement()'的命令?認爲它只更新表的內容!? – N43

+0

對不起,我不明白你在說什麼。 –

+0

非常感謝你解決了我的問題!不關心上面的評論;) – N43

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使用樣式名和更改圖標

+0

坦克的答案,但我已經使用這個'DataGrid.Resources'和CSS。我有一個複雜的'AbstractCell ' - 也有一些圖標的標題,有時會對齊或右對齊,幷包含另外兩個DIV。在排序完成後,我真的需要運行代碼,以便使用DOM訪問此箭頭,並在顯示後對其進行處理。 – N43

相關問題