2012-04-06 4 views
0

この問題は私を狂ってしまいました。本当にお手伝いが必要です。Flash Builder:Datagridでの奇妙な動作

私は、mysqlから照会されたデータを表示するデータグリッドを持っています。私はユーザーがデータベースに新しいレコードを追加する場合、私のデータグリッドに新しい行を追加しようとしています。つまり、アップロードされたデータをデータベースに反映させるためにdatagridが必要です。 DataGridは、私が追加した最初のレコードでのみ動作するようです。 2番目のレコードを追加しようとすると、新しい行が追加されますが、最初の行が新しく更新されたレコードに変更されます。私は理解するのが少し難しいことを知っているので、私はここに絵を描く。

DATAGRID 

id name  number 
1 test1  111 
2 test2  222 

私は新しいレコードを追加し、データグリッドが

id name  number 
1 test1  111 
2 test2  222 
3 test3  333 //new record, works fine. 

になりますと言うことができますが、私は別のレコードを追加した場合、私は再び別のレコードを追加した場合、それは、

id name  number 
1 test1  111 
2 test2  222 
4 test4  444 //old record, the values change to the newest record. 
4 test4  444 //new record, but also change the previous record 

になりますそれはなるでしょう

id name  number 
1 test1  111 
2 test2  222 
5 test5  555 //first record, the values change to the newest record. 
5 test5  555 //second record, the values change to the newest record. 
5 test5  555 //newest record, change the previous 2 records 

私はデバッグすることが考えられるが、まだ運がない何かをした。 次は私のコードです:

// my php data service 
<s:CallResponder id="addResult" result="addResult_resultHandler(event)" /> 

<script> 

     //The handler after the user click ADD button 

     protected function addBtn_clickHandler(event:MouseEvent):void 
      { 
       var newData:object = new Object(); 
       newData.test1=formField1.text; 
       newData.test2=formField2.text; 
       newData.test3=formField3.text; 
       newData.test4=formField4.text; 


          addResult.token=Service.createJob(newData); 



      } 





    //the result handler for data service. 
     protected function addResult_resultHandler(event:ResultEvent):void 
       { 
          //jobData is my dataProvider in my datagrid component 
          //not sure why addItem() would mess me up so badly... 
          //newData is an Object created after user click the update  
          //button 

          jobDG.jobData.addItem(newData);   
       } 


    Mxml 

    <components:dataGridPanel id="jobDG" 
           jobData="{getJobsResult.lastResult}"/> 


    My datagrid component 

    mxml 
     <s:DataGrid id="dg" editable="true" x="5" y="3" width="734" height="253"> 
      <s:columns> 
       <s:ArrayList> 

       <s:GridColumn dataField="test1" headerText="text1">  
          </s:GridColumn> 
       <s:GridColumn dataField="test2" headerText="text2">    
          </s:GridColumn> 
       <s:GridColumn dataField="test3" headerText="text3"> 
          </s:GridColumn> 
       <s:GridColumn dataField="test4" headerText="text4"> 
          </s:GridColumn> 
       </s:ArrayList> 
      </s:columns> 
      <s:typicalItem> 
      <fx:Object text1="aaaaa" text2="bbbbb" text3="ccccc" text4="dddddd"> 
        </fx:Object> 
      </s:typicalItem> 
      <s:AsyncListView list="{jobData}" /> 
     </s:DataGrid> 

私は今、本当に必死です。どんな助けにも感謝します。

+0

これは実際のコードではありませんか?それは動作しませんでした: 'addBtn_clickHandler()'でローカルに宣言されていたときに、 'addResult_resultHandler()'の変数 'newData'にアクセスしています。コンパイルすべきではありません。 – RIAstar

答えて

2

あなたの投稿したコードがあなたが実際に使っているものとは思われないと私は同意しますが、あなたの問題の種を示していると思います。私は、addBtn_clickHandler関数ではなく、クラスの先頭でインスタンス化するnewDataというインスタンス変数があると思います。

以前はコレクションに追加したことがないため、初めて動作します。ボタンをもう一度クリックすると、同じオブジェクトのプロパティを変更してから、イベントハンドラのコレクションに追加するだけです(イベントのデータを見て、新しいオブジェクトを取得するのではなく、データベース)。

0

私はFlex/Flash Builderでうまくいきませんが、私はactionscriptでうまくいきます。あなたのコードはちょっと切り詰められて/私に簡略化されて見えますか?あなたは完全な機能を投稿できますか?

私はDataProvidersでもすばらしいとは思いませんが、私はその概念を理解しており、これまでDataGridを使用してきました。私はAS3 docs on DataGridsをもう一度チェックします:プロバイダの全体を最初に定義したすべての例のように見え、それをグリッドに適用します。いくつかの特別なリスナーでイベントを設定するか、データを更新した後にグリッド全体を破棄して再構築する必要がありますか?私はそれがフロントエンドのディスプレイの問題だと仮定していますが、コードがなければ、バックエンドロジックの問題を除外することはできません。

+1

-1。これはコメントではなく、答えであったはずです。それは質問に答えることを何もしないからです。 –

+0

私は助けようとしましたが、あなたが正しいと思います。より完全なコードなしで答えるのは難しい質問です。私はこのタイプの応答を今後コメントとして投稿します。私はstackoveflowの質問に答えることになると騒ぎですが、私はできる限り貢献したいと思います。先端に感謝します。 – case2000

+0

[faq]を読んで、それはあなたを良くするでしょう。あなたがここに助けてくれてうれしい、あなたは私たちすべてがいることに気づくでしょう。しかし、本当に答えではない回答を投稿すると、フォーラムの質が低下するので、[faq] –