问题描述
把一个XML赋给一个DataGrid的dataProvider,然后对XML的结点用DELETE进行删除操作。问题是,有时候删除,可以触发dataProvider的DATA_CHANGE事件,有时候触发不了。请问有谁遇到过这样的问题吗? 问题补充:<br /><?xml version="1.0" encoding="utf-8"?><br /><s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" <br /> xmlns:s="library://ns.adobe.com/flex/spark" <br /> xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"<br /> creationComplete="application1_creationCompleteHandler(event)"><br /><s:layout><br /><s:VerticalLayout/><br /></s:layout><br /><br /><fx:Script><br /><![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 /> // 删除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 />]]><br /></fx:Script><br /><br /><br /><mx:DataGrid id="dg" width="400" height="200" dataProvider="{contacts}"<br /> dragEnabled="true"<br /> dragMoveEnabled="true"<br /> dropEnabled="true"><br /><mx:columns><br /><mx:DataGridColumn dataField="name" /><br /><mx:DataGridColumn dataField="email" /><br /></mx:columns><br /></mx:DataGrid><br /><br /><s:Button id="insertData" click="insertData_clickHandler(event)" label="display data" /><br /><br /><br /><fx:Declarations><br /><!-- 非ビジュアルエレメント (サービス、値オブジェクトなど) をここに配置 --><br /><fx:XMLList xmlns="" id="contacts"><br /><emp><br /><name><br />john<br /></name><br /><email><br />hotdust@163.com<br /></email><br /></emp><br /><emp><br /><name><br />mary<br /></name><br /><email><br />mary@163.com<br /></email><br /></emp><br /></fx:XMLList><br /><br /></fx:Declarations><br /><br /></s:Application><br /><br /><br />在insertData_clickHandler方法中,有两个删除语句,<br />第一个删除name子节点的语句好用,执行完后,DataGrid发生变化。<br />第二个删除emp整个节点的语句不好用,执行完后,DataGrid不发生变化。<br /><br />调查了一下,原因是DataGrid的Data_Change事件没有被触发,<br />但为什么删除name子节点时就可以被触发,删除emp整个节点时就不能被<br />触发呢?谢谢大家了。<br />
解决方案
首先,我不能给你个明确的答案,但是我发表一下个人的柑橘:你的name是dataFiled也就是数据域,你的email也是,你可以试试删除email时触发事件否?你的emp不是数据域,所以在理论上讲,见车数据变动时不算作事件触发的条件。仅供参考。
解决方案二:
能提供部分的代码吗,这样谁都很能定位问题。