0

ここで私と一緒に耐えなさい。必要なことを達成するための奇妙な設定があります。基本的に、WebServiceによって返されたデータを表示するAdvancedDataGridがあります。データはXML形式です。

<children label="parent 1" value="3100">
    <children label="child 1" value="1100">
        <children label="grandchild 1" value="200">
        </children>
        <children label="grandchild 2" value="300">
        </children>
        <children label="grandchild 3" value="600">
        </children>
    </children>
    <children label="child 2" value="2000">
        <children label="grandchild 4" value="1200">
        </children>
        <children label="grandchild 5" value="800">
        </children>
    </children>
</children>
<children label="parent 2" value="1000">
    <children label="child 3" value="1000">
        <children label="grandchild 6" value="300">
        </children>
        <children label="grandchild 7" value="700">
        </children>
    </children>
</children>

XMLをWebService結果ハンドラーでHierarchicalDataオブジェクトに変換します。AdvancedDataGridの列も動的に作成します。これは、ユーザー入力に応じて異なる列を表示するために使用されていたためです。ただし、AdvancedDataGridの下部に合計「行」も表示する必要があります。XMLListCollectionをGroupingCollectionに変換して、この方法で合計行を作成する方法がわからないため、実際にWebServiceで合計を計算し、これをXMLのノードとして返します。

<totals value="4100" />

この「合計」データを使用して、最初のADGのすぐ下にあるヘッダーのない2番目のAdvancedDataGridにデータを入力し、最初のADGの「最後の行」のように「表示」します。両方のADGは、同じBindable列の配列を使用します。

<mx:AdvancedDataGrid id="reportADG" dataProvider="{__model.reportData}"
    columns="{__model.adgDrillColumns}" width="100%" height="100%" />

<mx:AdvancedDataGrid id="reportTotalsADG" 
    dataProvider="{__model.reportTotalsData}" 
    folderOpenIcon="{null}" folderClosedIcon="{null}" 
    disclosureClosedIcon="{null}" disclosureOpenIcon="{null}" 
    defaultLeafIcon="{null}" showHeaders="false" 
    selectable="false" rowCount="1" 
    columns="{__model.adgColumns}" width="100%" />

ただし、最初のADGで列のサイズが変更された場合、2番目のADGの列もサイズ変更する方法が見つかりません。私に何ができる?

4

1 に答える 1

1

集計行メソッドを使用するか、カスタム コンポーネントを作成して合計を個別に表示できます。私の場合、すべての ADG 列を取得し、それらの幅を決定し、垂直線/セパレーターを描画し、すべての行を合計してラベルを表示するカスタム コンポーネントを作成する必要がありました。これは次のように使用されるので便利です。

<components:DataGridSummaryFooter id="summaryView"
     height="6%" width="100%"
     totalsColumns="{[impressionsCol, estimatedSpendingCol]}"
     dataSource="{dataViewSource}" 
/>

...残りは魔法です!

参考までに、集計行を使用せずに別のコンポーネントを作成しなければならなかった理由は、このアプリケーションの設計要件によるものでした。実際、常にこの方法で行われることを願っています。なぜなら、集計行では、集計を表示するためにグリッドの一番下までスクロールする必要があり、それはあまり良い UX ではないからです。

これがいつか誰かの何かに役立つことを願っています!:)

乾杯

于 2009-09-17T23:52:30.230 に答える