0 0

用delete删除xml结点时,无法触发DATA_CHANGE事件的问题10

把一个XML赋给一个DataGrid的dataProvider,
然后对XML的结点用DELETE进行删除操作。

问题是,有时候删除,可以触发dataProvider的DATA_CHANGE事件,
有时候触发不了。请问有谁遇到过这样的问题吗?

问题补充: <br />&lt;?xml version="1.0" encoding="utf-8"?&gt; <br />&lt;s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" <br /> &nbsp;&nbsp; xmlns:s="library://ns.adobe.com/flex/spark" <br /> &nbsp;&nbsp; xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" <br /> &nbsp;&nbsp; creationComplete="application1_creationCompleteHandler(event)"&gt; <br /> &lt;s:layout&gt; <br /> &lt;s:VerticalLayout/&gt; <br /> &lt;/s:layout&gt; <br /> <br /> &lt;fx:Script&gt; <br /> &lt;![CDATA[ <br /> import mx.collections.*; <br /> import mx.events.*; <br /> <br /> public var dataProviderSource:XMLListCollection; <br /> <br /> protected function insertData_clickHandler(event:MouseEvent):void <br /> { <br /> trace("before delete:" + dataProviderSource.source.toXMLString()); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 删除john的名字,好用 <br /> delete dataProviderSource.source[0].name[0]; <br /> // 删除john,不好用 <br /> //delete dataProviderSource.source[0]; <br /> trace("after delete:" + dataProviderSource.source.toXMLString()); <br /> } <br /> <br /> protected function application1_creationCompleteHandler(event:FlexEvent):void <br /> { <br /> dataProviderSource = new XMLListCollection(); <br /> dataProviderSource.addEventListener(CollectionEvent.COLLECTION_CHANGE , dataChangedHandler); <br /> dataProviderSource.source = contacts; <br /> } <br /> <br /> private function dataChangedHandler( event:CollectionEvent ):void{ <br /> trace("aaaaaaaa"); <br /> } <br /> <br /> ]]&gt; <br /> &lt;/fx:Script&gt; <br /> <br /> <br /> &lt;mx:DataGrid id="dg" width="400" height="200" dataProvider="{contacts}" <br /> dragEnabled="true" <br /> dragMoveEnabled="true" <br /> dropEnabled="true"&gt; <br /> &lt;mx:columns&gt; <br /> &lt;mx:DataGridColumn dataField="name" /&gt; <br /> &lt;mx:DataGridColumn dataField="email" /&gt; <br /> &lt;/mx:columns&gt; <br /> &lt;/mx:DataGrid&gt; <br /> <br /> &lt;s:Button id="insertData" click="insertData_clickHandler(event)" label="display data" /&gt; <br /> <br /> <br /> &lt;fx:Declarations&gt; <br /> &lt;!-- 非ビジュアルエレメント (サービス、値オブジェクトなど) をここに配置 --&gt; <br /> &lt;fx:XMLList xmlns="" id="contacts"&gt; <br /> &lt;emp&gt; <br /> &lt;name&gt; <br /> john <br /> &lt;/name&gt; <br /> &lt;email&gt; <br /> hotdust@163.com <br /> &lt;/email&gt; <br /> &lt;/emp&gt; <br /> &lt;emp&gt; <br /> &lt;name&gt; <br /> mary <br /> &lt;/name&gt; <br /> &lt;email&gt; <br /> mary@163.com <br /> &lt;/email&gt; <br /> &lt;/emp&gt; <br /> &lt;/fx:XMLList&gt; <br /> <br /> &lt;/fx:Declarations&gt; <br /> <br />&lt;/s:Application&gt; <br /> <br /> <br />在insertData_clickHandler方法中,有两个删除语句, <br />第一个删除name子节点的语句好用,执行完后,DataGrid发生变化。 <br />第二个删除emp整个节点的语句不好用,执行完后,DataGrid不发生变化。 <br /> <br />调查了一下,原因是DataGrid的Data_Change事件没有被触发, <br />但为什么删除name子节点时就可以被触发,删除emp整个节点时就不能被 <br />触发呢?谢谢大家了。 <br />

问题补充:<div class="quote_title">283433775 写道</div><div class="quote_div">能提供部分的代码吗,这样谁都很能定位问题。</div> <br />谢谢你的回复,代码已经发上去了,但格式不太好,没有再编辑功能,可能会看着很累,辛苦了。

问题补充:想使用delete方法时进行删除. <br />不想使用XMLListCollection.removeItemAt方法, <br />因为这个方法无法删除找到子节点进行删除,如:上面的删除NAME子节点.

问题补充:总结了一下: <br />删除DataGrid中的一行的话,datagrid的dataProvider不自动更新. <br />删除DataGrid中的一行中的一个字段的话,datagrid的dataProvider自动更新. <br /> <br />有谁知道原理吗?

问题补充:<div class="quote_title">283433775 写道</div><div class="quote_div">首先,我不能给你个明确的答案,但是我发表一下个人的柑橘: <br /> <br />你的name是dataFiled也就是数据域,你的email也是,你可以试试删除email时触发事件否? <br /> <br />你的emp不是数据域,所以在理论上讲,见车数据变动时不算作事件触发的条件。 <br /> <br />仅供参考。</div> <br /> <br />对于删除一行的的需求有什么解决方案吗? <br />最好是那种自动触发的解决方案(修改DataGrid等.), <br />如果是手动的话,很多地方都要加上处理. <br />谢谢你百忙之中的回复.
2011年8月23日 10:13

2个答案 按时间排序 按投票排序

0 0

采纳的答案

首先,我不能给你个明确的答案,但是我发表一下个人的柑橘:

你的name是dataFiled也就是数据域,你的email也是,你可以试试删除email时触发事件否?

你的emp不是数据域,所以在理论上讲,见车数据变动时不算作事件触发的条件。

仅供参考。

2011年8月23日 11:25
0 0

能提供部分的代码吗,这样谁都很能定位问题。

2011年8月23日 10:17

相关推荐

Global site tag (gtag.js) - Google Analytics