【问题标题】:Flash builder:Strange behavior on DatagridFlash builder:Datagrid 上的奇怪行为
【发布时间】:2012-04-06 00:58:49
【问题描述】:

这个问题把我逼疯了,我真的需要你们的帮助。

我有一个显示从 mysql 查询的数据的数据网格。如果用户向数据库添加新记录,我正在尝试向我的数据网格添加一个新行。换句话说,我希望 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>

我现在真的很绝望。任何帮助将不胜感激。

【问题讨论】:

  • 这不是你的真实代码,是吗?它不起作用:您正在访问“addResult_resultHandler()”中的变量“newData”,而它是在“addBtn_clickHandler()”中本地声明的。它甚至不应该编译。

标签: flash apache-flex datagrid


【解决方案1】:

我同意其他评论者的观点,即您发布的代码不太可能是您实际使用的代码,但我认为它确实显示了您的问题的根源。我认为您有一个名为 newData 的实例变量,您在类的顶部而不是在 addBtn_clickHandler 函数中实例化它。

它第一次起作用,因为您以前从未将它添加到集合中。当您再次单击该按钮时,我怀疑您只是在更改同一对象的属性,然后将其添加到结果处理程序中的集合中(而不是查看事件的数据以获取从数据库)。

【讨论】:

    【解决方案2】:

    我不太擅长 Flex/Flash-Builder,但我擅长使用 actionscript。您的代码对我来说看起来有点截断/简化?能贴出完整的功能吗?

    我对 DataProviders 也不是很好,但我理解这个概念并且以前使用过 DataGrids。我会仔细检查AS3 docs on DataGrids:看起来那里的每个示例都首先完整地定义了提供程序,然后将其应用于网格。您可能需要使用一些特殊的侦听器设置事件,甚至在更新数据后销毁并重建整个网格?我假设这只是前端显示问题,但如果没有更多代码,我们不能排除后端逻辑问题。

    【讨论】:

    • -1。这应该是评论,而不是答案。因为它对回答问题没有任何帮助。
    • 我想帮忙,但我猜你是对的。如果没有更完整的代码,这是一个很难回答的问题。我会在以后发布这种类型的回复作为评论。在回答有关 stackoveflow 的问题时,我是个菜鸟,但我想尽我所能做出贡献。感谢您的提示。
    • 阅读faq,它对你有好处。很高兴你来帮忙,你会发现我们都是。但是,发布不是真正答案的答案会降低论坛的质量,因此我强烈建议您查看faq
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 2013-04-20
    相关资源
    最近更新 更多