Flex DataGrid показывает смешанные данные - PullRequest
0 голосов
/ 14 декабря 2011

Я работаю во флексах несколько лет, и мне кажется, что это потрясающий инструмент.Несколько дней назад у меня было странное поведение в моей сетке данных.

У меня есть php-сервис, который читает базу данных и отправляет эти данные в felx.Служба и информация, сохраненная в поставщике данных в flex, работают без проблем, но когда сетка данных показывает загруженную информацию, она показывает много ячеек с неверными данными.Показанные данные, кажется, смешаны с другими клетками.Например, у меня есть два регистра: «Лампочка красная» и «Собака опасна».Но сетка данных показывает, например, «Лампочка опасна» или «Собака красная».

Когда я вижу провайдера данных в точке останова, все данные верны.

Но это даже очень странно, когдаЯ щелкаю по проблемной ячейке, это автоматически изменяет ее содержимое на правильные значения.

Я не нашел возможной причины, и я теряю голову.Кроме того, я пробовал решения, такие как проверка функций, я отключил сетку данных и кеш браузера и перерисовал все компоненты.Но, похоже, ничего не работает.Может быть, проблема с флэш-плеером?

Любая помощь будет принята с благодарностью.Спасибо.

одна картинка (всегда другая)

код ...

<?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.Вот код ИК.

<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"/>

1 Ответ

0 голосов
/ 21 декабря 2011

В прошлом я заметил, что иногда элемент 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>

Попробуйте и дайте нам знать: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...