0

私は奇妙な問題を抱えています。

Flex 4 では、Spark DataGrid があり、アイテム レンダラーと列の 1 つに定義された並べ替え比較関数の両方があります。奇妙なことに、この列は降順でソートされません。

データはもともとソートされていません。列ヘッダーをクリックすると、「上」矢印が表示され、データが昇順でソートされます。ただし、列ヘッダーを再度クリックしても何も起こりません。「上」矢印はそのままで、データは昇順でソートされたままです。

コードをデバッグしたところ、並べ替え比較関数の column.sortDescending が常に false であることがわかりました (降順並べ替えが発生する場合、これは true である必要がありますか?)。

私はこれを長い間グーグルで検索し、ここで検索しましたが、何も見つかりませんでした.

誰にもアイデアはありますか?

前もって感謝します。

//編集

簡単なコード例:

CreationComplete 関数は、いくつかのランダムな値を使用してデータを初期化します。

protected function application1_creationCompleteHandler(event:FlexEvent):void
            {
                arrayData = new ArrayCollection();

                var obj:Object;
                for(var i:Number=0; i < 10; i++) {
                    obj = new Object();
                    obj.value1 = i;
                    obj.value2 = Math.floor(Math.random() * (1 + 100 - 1)) + 1;
                    obj.value3 = Math.floor(Math.random() * (1 + 100 - 1)) + 1;

                    arrayData.addItem(obj);
                }
            }

Datagrid は、項目レンダラーとソート比較関数が定義された 4 番目の列で列を定義します。

<s:DataGrid x="122" y="142" width="391" height="223" requestedRowCount="4" dataProvider="{arrayData}">
        <s:columns>
            <s:ArrayList>
                <s:GridColumn dataField="value1" headerText="Value 1"></s:GridColumn>
                <s:GridColumn dataField="value2" headerText="Value 2"></s:GridColumn>
                <s:GridColumn dataField="value3" headerText="Value 3"></s:GridColumn>
                <s:GridColumn headerText="Value 3" sortable="true" itemRenderer="ItemRendererTest" sortCompareFunction="sortCompareFunc"></s:GridColumn>
            </s:ArrayList>
        </s:columns>
        <s:typicalItem>
            <fx:Object dataField1="Sample Data" dataField2="Sample Data" dataField3="Sample Data"></fx:Object>
        </s:typicalItem>
    </s:DataGrid>

アイテム レンダラー コード:

override public function prepare(hasBeenRecycled:Boolean):void {
                var columnString:String = data["value1"] + ":" + data["value2"] + ":" + data["value3"];

                lblData.text = columnString;
            }

ソート比較機能:

private function sortCompareFunc(obj1:Object, obj2:Object, col:GridColumn):int {
                var obj1String:String = obj1["value1"] + ":" + obj1["value2"] + ":" + obj1["value3"];
                var obj2String:String = obj2["value1"] + ":" + obj2["value2"] + ":" + obj2["value3"];

                var collator:SortingCollator = new SortingCollator();

                return collator.compare(obj1String, obj2String);
            }
4

1 に答える 1

4

これに似たものを自分で持っていたのですが、カスタムソート比較関数があるにもかかわらず、スパークグリッドコントロールには dataField 定義が必要なようです。使用しない場合でも、4 番目の列に dataField="value1" を追加してみてください。それは役立ちます。

于 2012-09-27T16:28:42.097 に答える