簡體   English   中英

Flex-按行標簽對數據網格列進行排序

[英]Flex - sorting a datagrid column by the row's label

我正在創建一個顯示來自MySQL數據庫的信息的表,我在各處都使用外鍵來交叉引用數據。

基本上,我有一個名為“ system”的數據網格。 系統是一個int ,表示另一個表中對象的ID 我使用了lableFunction來交叉引用兩者並重命名該列。 但是現在排序不起作用,我知道您必須創建一個自定義排序功能。 我嘗試再次交叉引用這兩個表,但這需要30秒才能對1200行進行排序。 現在,我對下一步應該做什么一無所知。

有什么方法可以訪問sort函數中的column字段標簽?

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;
    }
}

處理此問題的一種方法是遍歷收到的對象,並根據交叉引用的ID在每個對象上添加標簽作為屬性。 然后,您可以指定標簽屬性以顯示在數據網格列中,而不使用標簽功能。 這樣,您將可以按預期進行排序,而不必創建自己的排序函數。

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

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

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

一種方法是使用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);

根據我的經驗,我發現排序非常快,但是您的記錄集比我通常一次加載到內存中的記錄集略大。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM