0

この問題は私を夢中にさせました、そして私は本当にあなたたちが助けを必要としています。

mysqlからクエリされたデータを表示するデータグリッドがあります。ユーザーがデータベースに新しいレコードを追加した場合、データグリッドに新しい行を追加しようとしています。つまり、データベースにアップロードされたデータを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>

今は本当に必死です。どんな助けでもいただければ幸いです。

4

2 に答える 2

2

投稿されたコードが実際に使用しているものではない可能性が高いという他のコメント提供者には同意しますが、問題の種を示していると思います。addBtn_clickHandler関数ではなく、クラスの先頭でインスタンス化するnewDataというインスタンス変数があると思います。

これまでコレクションに追加したことがないため、初めて機能します。ボタンをもう一度クリックすると、同じオブジェクトのプロパティを変更し、それを結果ハンドラーのコレクションに追加していると思われます(イベントのデータを調べて、から返された新しいオブジェクトを取得するのではありません)。データベース)。

于 2012-04-06T12:20:51.643 に答える
0

Flex / Flash-Builderはあまり得意ではありませんが、actionscriptは得意です。あなたのコードは私には少し切り捨てられた/単純化されたように見えますか?完全な機能を投稿できますか?

また、DataProviderは得意ではありませんが、概念を理解しており、以前にDataGridを使用したことがあります。DataGridsのAS3ドキュメントを再確認します。そこにあるすべての例では、最初にプロバイダー全体を定義してから、それをグリッドに適用しているようです。特別なリスナーを使用してイベントを設定したり、データを更新した後にグリッド全体を破棄して再構築したりする必要がある場合がありますか?これはフロントエンドの表示の問題にすぎないと思いますが、コードがなければ、バックエンドのロジックの問題を除外することはできません。

于 2012-04-06T05:00:52.750 に答える