0

OK、以下は私がしなければならないことの簡単な例です。

これまでのところ、A1で動作します。ID はフレンド名に置き換えられ、列は並べ替え可能です。

ここで、これを数千の ID と数千の行を含むシステムに適用する必要があります。

私はそれを試してみましたが、とても遅く、このようなものをクライアントに提供することは不可能です...

同じ目標を達成するための最善のアプローチは何だと思いますか?

私が持っていた唯一のアイデアは、IDだけをDBに保存する代わりに、名前も文字列として保存することです...私はそれが私が保存する必要のない情報だと思っています...

誰にもアイデアがありますか?各行で fId.labelFunction(obj1, fId)を呼び出す代わりに、レンダリングされた文字列を並べ替える別の方法はありますか?

どうもありがとう!

<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
xmlns:s="library://ns.adobe.com/flex/spark" 
xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;
        import mx.events.FlexEvent;

        [Bindable]
        private var _friendList:ArrayCollection = new ArrayCollection([
            {friend_id : 1},
            {friend_id : 3},
            {friend_id : 2},
            {friend_id : 2},
            {friend_id : 1},
            {friend_id : 2},
            {friend_id : 1},
            {friend_id : 3}
        ]);

        private function friendNameFromID(item:Object, column:DataGridColumn):String
        {
            var id:int = item[column.dataField];

            if (id == 1)
                return "Thomas";

            if (id == 2)
                return "Anthony";

            if (id == 3)
                return "George"

            return "";
        }

        private function sortFromFriendName(obj1:Object, obj2:Object):int
        {
            var value1:String = fId.labelFunction(obj1, fId);
            var value2:String = fId.labelFunction(obj2, fId);

            if (value1 == value2)
                return 0;
            else if (value1 > value2)
                return 1;
            else
                return -1;
        }

    ]]>
</fx:Script>

<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>

<mx:DataGrid id="myDataGrid" dataProvider="{_friendList}" width="90%" height="90%" horizontalCenter="0" verticalCenter="0">
    <mx:columns>
        <mx:DataGridColumn dataField="friend_id"/>
        <mx:DataGridColumn id="fId" dataField="friend_id" labelFunction="friendNameFromID" sortCompareFunction="sortFromFriendName"/>
    </mx:columns>
</mx:DataGrid>

4

2 に答える 2

2

データのページングについてはどうですか? これらの一連の行をすべてフィルタリングすることは、あなたの頭痛の種だけではありません。ユーザーも文句を言うことができます;)

例として最初に見つけたものを次に示します。Flex Datagrid での高度なページングとフィルタリング

于 2011-09-14T14:54:04.697 に答える
1

一連の if(..) を実行する代わりに、Dictionary オブジェクトを使用して、ID をキー、名前を値として設定してみましたか? 私が間違っていなければ、ディクショナリへのアクセスはハッシュ関数を使用して行われ、一連の if ステートメントよりもはるかに高速です。

<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
xmlns:s="library://ns.adobe.com/flex/spark" 
xmlns:mx="library://ns.adobe.com/flex/mx"
initialize="buildNameDictionary()"
>
<fx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;
        import mx.events.FlexEvent;

        private var nameDictionary:Dictionary;

        [Bindable]
        private var _friendList:ArrayCollection = new ArrayCollection([
            {friend_id : 1},
            {friend_id : 3},
            {friend_id : 2},
            {friend_id : 2},
            {friend_id : 1},
            {friend_id : 2},
            {friend_id : 1},
            {friend_id : 3}
        ]);

        private function buildNameDictionary():void
        {
            nameDictionary= new Dictionary();
            nameDictionary[1] = "Thomas";
            nameDictionary[2] = "Anthony";
            nameDictionary[3] = "George";
        }

        private function friendNameFromID(item:Object, column:DataGridColumn):String
        {
            if(nameDictionary[item])
                return nameDictionary[item] as String

            return "";
        }

        private function sortFromFriendName(obj1:Object, obj2:Object):int
        {
            var value1:String = fId.labelFunction(obj1, fId);
            var value2:String = fId.labelFunction(obj2, fId);

            if (value1 == value2)
                return 0;
            else if (value1 > value2)
                return 1;
            else
                return -1;
        }

    ]]>
</fx:Script>

<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>

<mx:DataGrid id="myDataGrid" dataProvider="{_friendList}" width="90%" height="90%" horizontalCenter="0" verticalCenter="0">
    <mx:columns>
        <mx:DataGridColumn dataField="friend_id"/>
        <mx:DataGridColumn id="fId" dataField="friend_id" labelFunction="friendNameFromID" sortCompareFunction="sortFromFriendName"/>
    </mx:columns>
</mx:DataGrid>
于 2011-09-14T14:46:40.190 に答える