2010-08-18 96 views
1

我正在創建一個顯示來自MySQL數據庫的信息的表,我使用遍歷整個地方的外鍵來交叉引用數據。Flex - 按行標籤對DataGrid列進行排序

基本上我有一個名爲'system'的列的datagrid。該系統是一個int,它代表另一個表中的對象的id。我已經使用lableFunction來交叉引用這兩個並重命名該列。但現在排序不起作用,我知道你必須創建一個自定義的排序功能。我試過再次交叉引用這兩個表,但是這需要大約30秒來對1200行進行排序。現在我只是無能爲力,接下來我應該嘗試一下。

有什麼辦法可以訪問排序函數內的列字段標籤嗎?

public function order(a:Object,b:Object):int 
{ 
    var v1:String = a.sys; 
    var v2:String = b.sys; 
    if (v1 < v2){ 
     trace(-1); 
     return -1; 
    }else if (v1 > v2){ 
     trace(1); 
     return 1; 
    }else { 
     trace(0); 
     return 0; 
    } 
}

回答

1

處理此問題的一種方法是,通過收到的對象並根據交叉引用的ID將標籤添加爲每個對象的屬性。然後,您可以指定您的標籤屬性以顯示在數據網格列中,而不是使用標籤功能。這樣你就可以像預期的那樣進行排序,而不必創建自己的排序功能。

+0

我認爲這是我必須要做的。我試圖保留所有的數據,但我認爲這不會發生。我會試一試。 – noazark 2010-08-18 23:02:54

+0

感謝千里眼,事情似乎很有效地工作。 基本上,我保持模型中的所有表單獨使用(使用robotlegs),當表更新時,它調用一個方法將交叉引用的字段添加到表格行中。我沒有多少注意到(如果有的話)額外的滯後。再次感謝。 – noazark 2010-08-19 00:09:32

0

DataGrid和其他基於列表的類的工作方式是使用itemRenderer。渲染器僅針對屏幕上顯示的數據創建。在大多數情況下,dataProvider中的數據比屏幕上顯示的要多得多。

試圖根據dataGrid顯示的內容對數據進行排序很可能不會給你想要的結果。

但是,沒有理由不能在sortFunction中的數據對象上調用相同的標籤函數。

一種方法是使用DataGrid的itemToLabel功能:

var v1:String = dataGrid.itemToLabel(a); 
var v2:String = dataGrid.itemToLabel(b); 

的第二種方法是隻調用了labelFunction明確:

var v1:String = labelFunction(a); 
var v2:String = = labelFunction(b); 

根據我的經驗,我發現排序是非常快,但是你的記錄集比我通常在同一時間在內存中加載的記錄集稍大。

相關問題