我有一个数据网格,显示从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 :(得分:2)
我同意其他评论者的观点,即您发布的代码不太可能是您实际使用的代码,但我认为它确实显示了您的问题的种子。我认为您有一个名为newData的实例变量,您可以在类的顶部实例化,而不是在addBtn_clickHandler函数中实例化。
第一次使用它,因为你之前从未将它添加到集合中。再次单击该按钮时,我怀疑您只是更改同一对象上的属性,然后将其添加到结果处理程序中的集合中(而不是查看事件的数据以获取从该对象返回的新对象)数据库)。
答案 1 :(得分:0)
我对Flex / Flash-Builder并不是非常好,但我对动作脚本很好。您的代码看起来有点截断/简化给我?你能发布完整的功能吗?
我对DataProviders也不是很了解,但我理解这个概念并且之前使用过DataGrids。我仔细检查AS3 docs on DataGrids:看起来每个示例都首先完整定义了提供程序,然后将其应用于网格。您可能必须使用一些特殊的侦听器设置事件,甚至在更新数据后销毁并重建整个网格?我认为它只是前端显示问题,但如果没有更多代码,我们就无法排除后端逻辑问题。