【问题标题】:Flex DataGrid shows mixed dataFlex DataGrid 显示混合数据
【发布时间】:2012-01-20 11:44:04
【问题描述】:

我已经在 flex 领域工作了几年,在我看来它是一个很棒的工具。几天前,我的数据网格中出现了异常行为。

我有一个 php 服务,它读取数据库并将这些数据发送到 felx。 flex 中保存在 dataprovider 中的服务和信息都可以正常工作,但是当 datagrid 显示加载的信息时,它会显示许多包含错误数据的单元格。显示的数据似乎与其他单元格混合在一起。 例如我有两个寄存器:“灯泡是红色的”和“狗很危险”。但是数据网格显示例如“灯泡很危险”或“狗是红色的”。

当我在断点中看到数据提供者时,所有数据都是正确的。

但是当我点击有问题的单元格时甚至更奇怪,这会自动将其内容更改为正确的值。

我没有找到可能的原因,我正在失去理智。我也尝试过像验证函数这样的解决方案,我已经关闭了数据网格和浏览器缓存并重绘了所有组件。但似乎没有任何效果。可能是 Flash 播放器的问题?

任何帮助将不胜感激。谢谢。

一张照片(永远不同)

代码...

<?xml version="1.0" encoding="utf-8"?>

<fx:Script>
    <![CDATA[

        protected function btnBuscar_clickHandler(event:MouseEvent):void{//Calls the searching service
            dfFechaOtrosDetalles.text = "";
            if ((txtBuscarId.text == "") && (dfBuscarFecha.text == "") && (comboBuscarCiudades.textInput.text == "") && (txtBuscarEmpresa.text == "") && (txtBuscarSucursal.text == "") && (txtBuscarObra.text == "") && ((comboBuscarEstado.selectedItem == " ") || (comboBuscarEstado.selectedItem == "")))
                txtBuscarId.setFocus();
            else
                if (comboBuscarCiudades.textInput.text == "")
                    getAllPropuestaResult.token = propuestaService.buscarPropuesta(txtBuscarId.text.toString(),dfBuscarFecha.text,RBGRangoBusquedaFecha.selectedValue.toString(),"",txtBuscarEmpresa.text,txtBuscarSucursal.text,txtBuscarObra.text,comboBuscarEstado.selectedItem);
                else
                    getAllPropuestaResult.token = propuestaService.buscarPropuesta(txtBuscarId.text,dfBuscarFecha.text,RBGRangoBusquedaFecha.selectedValue.toString(),comboBuscarCiudades.selectedItem.id,txtBuscarEmpresa.text,txtBuscarSucursal.text,txtBuscarObra.text, comboBuscarEstado.selectedItem);
        }

    ]]> 
</fx:Script>

<fx:Declarations>
    <s:CallResponder id="getAllPropuestaResult"/>       
    <propuestaservice:PropuestaService id="propuestaService" fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" showBusyCursor="true"/>       
    <PropuestasDataType:PropuestasDataType id="propuestasDataType"/>

<fx:Binding source="dgPropuestas.selectedItem as PropuestasDataType" destination="propuestasDataType"/>

<!-- MAIN INTERFACE-->  
<mx:DataGrid x="17" y="40" id="dgPropuestas" dataProvider="{getAllPropuestaResult.lastResult}" styleName="grid" height="184" change="dgPropuestas_changeHadler(event)">
    <mx:columns>
        <mx:DataGridColumn headerText="ID" dataField="id" width="40"/>
        <mx:DataGridColumn headerText="Ciudad" dataField="ciudydepto" width="150" itemRenderer="mxml.IRRichEditableDataGrid"/>
        <mx:DataGridColumn headerText="Empresa" dataField="empresa" width="150" itemRenderer="mxml.IRRichEditableDataGrid"/>
        <mx:DataGridColumn headerText="Sucursal" dataField="sucursal" width="130" itemRenderer="mxml.IRRichEditableDataGrid"/>
        <mx:DataGridColumn headerText="Obra" dataField="obra" width="200" itemRenderer="mxml.IRRichEditableDataGrid"/>
        <mx:DataGridColumn headerText="Valor" dataField="valor" width="100" itemRenderer="mxml.IRRichEditableDataGrid"/>
    </mx:columns>
</mx:DataGrid>


我仍然有问题,但现在我意识到这是与 itemrenderers 相关的问题。我有一个允许从单元格中选择和复制文本的 IR,但我已经测试过,如果没有 IR 相关,则不会出现此错误。这是 IR 的代码。

<s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                      xmlns:s="library://ns.adobe.com/flex/spark" 
                      xmlns:mx="library://ns.adobe.com/flex/mx" 
                      focusEnabled="true">
<s:RichEditableText id="lblData" top="0" left="2" right="0" bottom="0" text="{dataGridListData.label}" selectable="true" editable="false" height="35" verticalAlign="middle"/>

【问题讨论】:

  • 你能至少张贴这个奇怪行为的截图吗?我不认识其他人,但我宁愿看一些代码,也不愿猜测你的故事。
  • 欢迎来到 Stack Overflow!请仅将发布答案按钮用于实际答案。您应该修改原始问题以添加更多信息。

标签: apache-flex datagrid flash


【解决方案1】:

我过去注意到,有时,dataGrid itemRenderer 可能无法将好的值保持在正确的位置,尤其是当您拥有大量数据时。

问题在于,当您调整应用程序大小或向下滚动 dataGrid 时,会触发 dataChange() 事件,并且 itemRenderer 似乎无法正确绑定数据。

这个解决方案对我有用:

<?xml version="1.0" encoding="utf-8"?>
<s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    focusEnabled="true" dataChange="dataChangeHandler(event)">

    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;
            import mx.utils.ObjectProxy;

            [Bindable]
            private var _data:ObjectProxy;

            protected function dataChangeHandler(event:FlexEvent):void
            {
                if (data)
                    _data = new ObjectProxy(data);
            }

        ]]>
    </fx:Script>

    <s:RichEditableText id="lblData" top="0" left="2" right="0" bottom="0" text="{_data.label}" selectable="true" editable="false" height="35" verticalAlign="middle"/>

</s:MXDataGridItemRenderer>

试试看,告诉我们:-)

【讨论】:

  • 好吧,我正在尝试,但我无法让它显示在网格中,数据网格看起来很干净,但它已经加载了信息,我知道,因为我有一个详细信息表单,当我选择一行时,应用程序填写详细信息表格。有任何想法吗?我会继续工作的。
  • @FELIPE 对不起,我想你,在你的情况下,你可能不得不使用“dataGridListData”而不是像我的例子中的“数据”......所以“如果(dataGridListData)_data = new ObjectProxy( dataGridListData);"
  • 解决了!我使用的是 dataGridListData.Label 而不是 dataGridListData。 Jivago,非常感谢。
猜你喜欢
  • 1970-01-01
  • 2013-08-01
  • 2010-10-05
  • 2011-04-09
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多