0

私は次の問題に固執しています:

10個のアイテムがdatagridあります...prevouisフィールドの合計を表示する行(行番号11)も追加しました...しかし、この最後の行(合計)を常に最後の行に保持したいと思います。データグリッド(常に11位)。

これは、データグリッドが列で並べ替えられると、最後の行もデータフィールドの値に応じて位置が変わることを意味します。合計のある列が常に最後に配置されるように、他の列と一緒にソートされないようにする簡単で簡単な方法はありますか?または、どのアプローチを使用するのが最適ですか?

助けてくれてありがとう!

4

2 に答える 2

1

以下のコードを見つけてください。

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
               >
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.events.FlexEvent;

            [Bindable]
            private var dpHierarchy:ArrayCollection= new ArrayCollection([
                {name:"A", region: "Arizona", number:1},
                {name:"B", region: "Arizona", number:2},
                {name:"C", region: "California", number:3},
                {name:"D", region: "California", number:4}
            ]); 

            private function creationComp():void
            {
                var totalValue:int = 0;
                for(var i:int=0; i<dpHierarchy.length; i++)
                {
                    totalValue = totalValue + dpHierarchy[i].number;
                }
                var obj:Object = new Object();
                obj.name = "Total";
                obj.region = "==";
                obj.number = totalValue;
                dpHierarchy.addItem(obj)
                myADG.dataProvider = dpHierarchy;
            }

            private function sortHandler(obj1:Object, obj2:Object):int
            {
                var lastObj:Object = dpHierarchy.getItemAt(dpHierarchy.length-1);

                if(lastObj.number == obj1.number || lastObj.number == obj2.number)
                    return 0;

                if(obj1.number < obj2.number) {
                    return -1;
                } else if(obj1 == obj2) {
                    return 0;
                }
                return 1;
            }
        ]]>
    </fx:Script>

    <mx:AdvancedDataGrid id="myADG" x="50" y="50"
                         width="400" height="300" 
                         variableRowHeight="true" creationComplete="creationComp()">
        <mx:columns>
            <mx:AdvancedDataGridColumn dataField="name" headerText="Name" sortCompareFunction="sortHandler"/>
            <mx:AdvancedDataGridColumn dataField="region" headerText="Region" sortCompareFunction="sortHandler"/>
            <mx:AdvancedDataGridColumn dataField="number" headerText="Number" sortCompareFunction="sortHandler"/>
        </mx:columns>   

    </mx:AdvancedDataGrid>

</s:Application>
于 2012-06-19T06:13:46.857 に答える
0

この順序でいくつかのオプションを検討します。

  1. 要約データを別の場所に置きます。これは、データグリッドの行が意図したものではありません。
  2. ユーザーにデータを並べ替えさせたくない場合は、列名 (sortableColumns='false') をクリックして並べ替えさせないでください。
  3. 集計データが常に最後に配置されるように、列ごとにカスタムの並べ替えを作成します。ここにまともなチュートリアルがあります: http://www.switchonthecode.com/tutorials/flex-datagrid-custom-sorting . すべての列に対してカスタムの並べ替えを作成する必要があるため、これはメンテナンスの手間がかかるアイデアであることを強調したいと思います。
于 2012-06-18T18:22:53.210 に答える