2012-04-06 64 views
0

這個問題奇怪的行爲已經推動我瘋了,我真的很需要你們的幫助。Flash Builder中:在數據網格

我有示出被從MySQL查詢數據的數據網格。如果用戶將新記錄添加到數據庫,我試圖向我的數據網格添加一個新行。換句話說,我想讓datagrid反映數據庫中上傳的數據。 datagrid似乎只適用於我添加的第一個記錄。如果我嘗試添加第二條記錄,則會添加新行,但它也會將第一行更改爲新更新的記錄。我知道這有點難以理解,所以我在這裏畫一幅畫。

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 2012-04-06 08:28:23

回答

2

我同意其他評論者的意見,即您發佈的代碼不太可能是您實際使用的代碼,但我認爲它確實顯示了您的問題的種子。我認爲你有一個名爲newData的實例變量,可以在你的類的頂部實例化,而不是在addBtn_clickHandler函數中實例化。

它的作品,因爲你從來沒有之前添加到集合的第一次。當你再次點擊按鈕時,我懷疑你只是簡單地改變同一個對象上的屬性,然後將它添加到你的結果處理程序中的集合中(而不是查看事件的數據來獲取從對象返回的新對象)數據庫)。

0

我沒有使用Flex/Flash的生成器超好,但我好有動作。你的代碼看起來有點截斷/簡化了嗎?你能發佈完整的功能嗎?

我對DataProviders也不太瞭解,但是我理解了這個概念,並且之前使用了DataGrids。我會仔細檢查AS3 docs on DataGrids:它看起來像那裏的每個示例都首先定義提供程序,然後將其應用於網格。您可能需要使用一些特殊的偵聽器來設置事件,甚至在更新數據之後破壞並重建整個網格?我假設這只是一個前端顯示問題,但沒有更多的代碼,我們不能排除後端邏輯問題。

+1

-1。這應該是一個評論,而不是一個答案。因爲它沒有回答這個問題。 – 2012-04-06 05:50:50

+0

我試圖幫忙,但我想你是對的。沒有更完整的代碼,這是一個很難回答的問題。我將在未來發表此類回覆作爲評論。在回答stackoveflow上的問題時,我是一個noob,但我想盡我所能提供幫助。謝謝你的提示。 – case2000 2012-04-06 06:20:29

+0

閱讀[常見問題],它會幫助你。很高興你來幫忙,你會發現我們都是。但是,發佈並非真正答案的答案會降低論壇的質量,所以我強烈建議您查看[faq] – 2012-04-06 08:56:29