2011-02-01 14 views
3

advanceddatagridですべてのグループ化された列を並べ替えるソリューションを探しています。列頭をクリックするのと同じ動作でなければなりません。AdvancedDatagridでグループ化された列を並べ替える

私はグループ内のフィールドを並べ替える解決策を探していませんのでご注意ください。 compareFunctionという名前の作業ソリューションがあります。

しかし、写真の2行を列 "Einnahmen"で並べ替えることができません。ドイツ語の言葉を残して申し訳ありません。 アイデアはありますか? enter image description here

あなたがソートされた列を持つアプリケーションを起動するために探しているなら フランク

+0

彼らは列ヘッダ自体をクリックすることができない理由はありますか? –

+0

私は自分のアプリケーションをきれいにして並べ替えたい。それが理由。ありがとうございました! – Frank

+1

さて、私はcreationCompleteハンドラを私は、adgの私のdataProviderをソートし、adgはソートされた列 "einnahmen"できれいになる。しかし、1つのノードを展開すると、 "monat"列には1から12までのすべての月が含まれます。行もソートする必要があります。これを行う機会はありますか? – Frank

答えて

4

ありがとう、あなたが作成/ dateprovider更新時にヘッダのクリックをシミュレートする必要があります。

<mx:AdvancedDataGrid id="adg" 
    updateComplete="adg.dispatchEvent(new AdvancedDataGridEvent(AdvancedDataGridEvent.HEADER_RELEASE, false, true, 3, 'Einnahmen'))"> 
    <mx:columns> 
     ... 
     <mx:AdvancedDataGridColumn dataField="Einnahmen" sortDescending="true" /> 
    </mx:columns> 
</mx:AdvancedDataGrid> 

私はグループ化されたコレクションのためにこれを試していないが、私はこれがどのように動作するかを知ってみましょう:

これを試してみてください。

+0

ねえ、これは私には新しいものでした。ありがとうございました。残念ながら、それは動作しません。 TypeError:Error#1009:AdvancedDataGridBaseExのnullオブジェクト参照のプロパティまたはメソッドにアクセスできません。ごめんなさい。しかし、良いアイデア。 – Frank

+0

dataProviderが初期化されていない可能性があります。すべて – Ryan

1

編集: ActionScriptでdataProviderを作成していたことが分かりませんでした。あなたはまだそれを一緒に入れ終わった後にあなたのコレクションにSortを実行することができるはずです。

もう1つの方法は、AdvancedDataGridコンポーネントを拡張し、set dataProviderメソッドをオーバーライドして、バインドするとすぐにデータを並べ替えることです。 Treeコントロールの場合はan example another developer providedsource)ですが、同じ考えがAdvancedDataGridでおそらく使用できます。

オリジナルの答え:あなただけ(あなたがあなたのスクリーンショットからのもののように見える)トップレベルの「Einnahmen」値をソートしようとしていると仮定すると、

データが返された後、私は手動でdataProviderをソートしますあなたのデータを入手するために使用しているサービスから。

ここでは、コレクションを手動で並べ替える非常に基本的な例を示します。

var hd:HierarchicalData = new HierarchicalData(myDataList); 
hd.childrenField = "MyChildField"; 
myAdvancedDataGrid.dataProvider = hd; 
+0

hmmですが、動作しません。結局のところ、ArrayCollectionをHirachicalDataに変換することはできません。なぜなら、すべてのデータをASでグループ化する必要があるからです。私は、グループ化を構築している間は、並べ替えが途中で行われると思います。 damn – Frank

+0

これはSQLLite-Airアプリケーションです。データはSQLite-Databaseからフラット形式で受け取られます。配列として1000のエントリを言うことができます。各エントリは、Vertrag: "data"、name: "data" monat: "data" einahmen: "data"のようなフラット形式です。英語で:ContractNumber、CustomerName、month、earned。 – Frank

0

あなたは「sortExpertMode =を設定してみました:ちょうどHierarchicalDataの新しいインスタンスを作成し、このようなあなたのAdvancedDataGridに割り当て、あなたのAdvancedDataGridで使用するためHierarchicalDataに変換し

[Bindable] public var MyDataList:ArrayCollection; 
private var einnahmenSortField:SortField = new SortField("Einnahmen", true, false); 
private var theSort:Sort = new Sort(); 

// Called after data is returned from the remote service call to sort the data 
public function SetMyDataList(returnedList:ArrayCollection):void 
{ 
    MyDataList = returnedList; 

    if (theSort == null) 
    { 
    theSort = new Sort(); 
    theSort.fields = [einnahmenSortField]; 
    } 

    MyDataList.sort = this.theSort; 
    MyDataList.refresh(); 
} 

AdvancedDataGridタグの「true」ですか? AdvancedDataGrid.IものArrayCollectionからHierarchialDataを作成するために

<mx:AdvancedDataGrid height="318" 
        id="dataSetsDG" 
        allowMultipleSelection="false" 
        folderClosedIcon="{null}" 
        folderOpenIcon="{null}" 
        defaultLeafIcon="{null}" 
        left="28" 
        top="162" 
        rowCount="11" 
        width="70%" 
        displayItemsExpanded="true" 
        sortExpertMode="true"> 
+0

はい、このオプションが設定されています。ヒントありがとう! – Frank

0

は、私がデータプロバイダとして「HierarchicalData」を使用し、ソート順序を維持し、charm.Youが与えることができるようにそれが動作します:以下のサンプルコードを見つけてくださいそれは試してみよう! Actionscriptコードとサンプルのスクリーンショットをご覧ください。

Advanced Datagrid

public function createHierarchialResultVO(results:ArrayCollection):ArrayCollection 
    { 
     [ArrayElementType("ResultsVO")] 
     var dpHierrarchy:ArrayCollection = new ArrayCollection(); 

     for each(var result:Result in results) 
     { 
      var resultVO:ResultsVO= new ResultsVO(); 
      resultVO.resultName = result.resultName; 
      resultVO.runDate = result.runDate.toString(); 
      resultVO.type="header"; 

      var childrens:ArrayCollection = new ArrayCollection(); 
      for each(var processDetails:ProcessDetails in result.details) 
      { 
       var children:ResultsVO= new ResultsVO(); 
       children.files =result.fileCount; 
       children.status=result.status; 
       children.type="result"; 
      } 
      resultVO.children =children; 
      dpHierrarchy.addItem(resultVO); 
     } 
     return dpHierrarchy;    
    } 
+0

うわー、私はtomoorow朝それを試してみてください。ありがとうございました。あなたが何をしているのか知るためのコメントを追加することは親切です。しかし、明日はコードに深く入り込んできます。私はそれが自己展開することを願っています。ありがとうcu – Frank

+0

Allright。残念ながら、私のデータはこの構造ではありません。だから私はチャンスがなく、パントをソートするか、子供をソートするかの違いを作ります。しかし、すべてのケースであなたのコードに感謝します。 – Frank

関連する問題