2011-01-21 13 views
3

私は数時間検索しましたが、私の問題の答えは見つかりませんでした。コンボボックスにUNIQUEデータのデータグリッドを挿入するにはactionscript(flex)

私は、ダイナミックデータで埋められたデータグリッドにコンボボックスを配置しようとしています。 (これらのコンボボックスの数と内容は常に変更されますが、コンボボックスを使用する必要があるカラム数は事前に分かりませんので、すべてのコンボボックスは外部ソースから来るユニークなデータプロバイダを取得します。

-iこの問題を議論しているスレッドが見つかりましたが、厄介なmxmlファイルで解決し、ソースコード内のコンボボックスを手作業で埋めてください。私は指摘したい、それは私にとっては良くない。

-iは、インターネットからデータを取得するために、ある種のカスタムitemrendererを使用した、より良い解決策を見つけました。世界の国々の数と名前は多かれ少なかれ静的なものであり、変化しないので、悲しいことに、それは十分ではありませんでした。レンダラークラスはメインアルゴリズムのパラメータに依存しませんでした。

私のプログラムでは、私自身のactionscriptオブジェクトのデータを計算し、それをarraylistに入力します。ですから、最初からネットから目的のデータを読み込み、urlrequestの応答を取得したら、データグリッド/コンボボックスにデータを書き込むようにしてから始めてください。

データグリッドまたはコンボボックスを問題なく埋めることができますが、データグリッドセル内にそのコンボボックスを配置することは不可能です。

誰でもお手伝いできますか?それは私を狂ってしまう。私はいくつかの言語で、C#、java、さらにはPHP + htmlでもこれをやっていましたが、フレックスではあまりにも複雑に見えます。

EDIT: このネットワークアクティビティがサーバーに負荷をかける可能性があります。私はそれの背後にある哲学をデザインしていませんでした。私は期待に応えるクライアントを書くだけでいいです。

(私はちょうどそれらの厄介なコンボボックスを動作させるために、その一部を書き換えるために喜んだ)

=========

メイン:私のプログラムは次のようになります。 mxmlファイル

これはメインプログラムです。私はここでログイン関連のものを扱い、データグリッドの基本的なデザインプロパティを設定します。 (例えば:maxwidth、maxheight、layout constraintsなど) 私がデータグリッドを埋めるために書いたactionscriptクラスをインスタンス化するときのコマンドを除いて、面白いことは何もありません。

"..<fx:Script> 
    <![CDATA[ 
     private var myGrid1:MyGridType; 
     .. 
     somefunction { 
      myGrid1 = new MyGridType(theDatagridDefinedBefore, "argumentNeededToFillDataGridsWithUniqueData"); 
     } 
    ]]> 
</fx:Script>.." 

=========

MyGridType.asは、私はそれにイベントリスナーを追加し、第二引数の助けを借りてのURLRequestを呼び出すコンストラクタで

を提出します。データが到着すると、イベントリスナーはfill関数を起動します。結果を配列のコレクションに読み込み、最初の引数のデータグリッドのデータプロバイダにします。

これまでのところ良いです。

ここにコンボボックスの問題があります。特定の数の列については、私は私のコンボボックスクラスをインスタンス化します。そのクラス "MyComboBoxType"を呼び出してみましょう。

".. 
blablabla = new MyComboBoxType(theDatagridDefinedBefore, param1, param2, param3);" 

=========

MyComboBoxType.asは私がMyGridTypeクラスで何をしたか、私はほぼ正確に同じ行う

を提出します。 param1-2-3でネットからの助けを求める。私はデータを受け取ると、配列のコレクションを入力します。 arraycollectionをコンボボックスのdataproviderに設定してください。 AAAAAAAND今、私はそのarraycollectionまたはコンボボックスが "theDatagridDefinedBefore"というデータグリッドにあることを望みます。

+0

サンプルコードなどを提供する必要があります。あなたの答えはナンバー2のように私には聞こえます。しかし、すべてがパフォーマンスの悪夢のように聞こえる。 – JeffryHouser

+0

お寄せいただきありがとうございます!私はいくつかの詳細を追加しました、うまくいけば助けてください。 – Adam

答えて

0

私はそれがあなたが達成しようとしているものではないことを知っていますが、私は過去に幾分似た問題を抱えていました。それが役立つかどうかを調べるにはHow to get the value of a ComboBox within a DataGridを見てください。

私の場合は、可能であれば、ArrayCollectionをデータグリッドにバインドする前にArrayCollectionセット全体を設定します。

+0

答えに感謝します。私はあなたのコードを見ていますが、レンダラークラスがどの配列からデータを読み込むべきかを私には完全にはわかりません。 "dataProvider = {data.dataField2_Array}"は静的であるようです。私はオブジェクトにコンボボックスの内容を持っています。どのようにレンダラーにそのコンテンツを渡すことができますか、またはレンダラーからその動的データにどうやって到達できますか?私はコンボボックスがどれくらい存在するかわからないので、私は各コ​​ンボボックスに対して専用のレンダリングを行うことはできません。 – Adam

+0

基本的に私がしたいのは、[プログラム実行] ... [dummy.addItem(apple)] ... [dummy.addItem(peach)] ... [特定の時点で]:[myComboBox。 dataProvider = dummy] ... [myDataGridColumn [1] = myComboBox内のすべての行と、dummy2&myDataGridColumn [2]などと同じです。 (ユーザーがもちろんオプションから選択できる能力を持つ) – Adam

+0

誰かが私とまったく同じ問題を抱えているのを見ましたが、ここにリンクがあります:http://www.actionscript.org/forums/showthread.php3?t= 172962 (ofcの解決策はありません) – Adam

0

グリッド内の行に対して、[Bindable]というカスタムデータ構造(たとえば、MyGridDataクラス)を構築する必要があります(まだ行っていない場合)。

  • グリッドのdataProviderのは MyGridDataオブジェクトのArray/ArrayCollection /.. でなければなりません。
  • このステップは明らかに、すでに動作しますが、整合性のための :それは明示的に必要なときに にコンボボックスを返すために、MXMLを使用して getItemEditor関数をオーバーライド、または を指定します。 コンボボックスのdataProviderのよう
  • 、データは、あなたが処理している 行で使用 MyGridDataインスタンス レンダラークラス、内側から data.comboArrayを特定すべきです。 ( set data(value: Object):void 関数をオーバーライド、あなたがそれをプリプロセスをすることができます。)
  • このように、あなたはあなたの元のインスタンス、 の 参照して、あなたは/ が直接彼らにどんな変化を示して検出することができます結合することによって、作業しています。
関連する問題