【问题标题】:Flex editable datagrid with itemEditor "combobox" not auto scroll when I edit a cell编辑单元格时,带有 itemEditor“组合框”的 Flex 可编辑数据网格不会自动滚动
【发布时间】:2010-06-25 15:26:48
【问题描述】:

我有一个带有动态列的 flex 数据网格(矩阵 60 x 60,样本),每个单元格都是一个“组合框”。我的问题是当垂直滚动位置通过后面的任何行时。我该如何控制这个错误?如何使用“verticalScrollPosition”????

<mx:DataGrid height="100%" id="dgLineRanges" editable="{editable}" itemEditBegin="modifyEditedData(event);" itemEditEnd="saveEditedData(event);" horizontalScrollPolicy="auto" visible="false"/>

【问题讨论】:

    标签: apache-flex


    【解决方案1】:

    我使用这个代码:

    // Handle the itemEditBegin event.
            private function modifyEditedData(event:DataGridEvent):void
            {    
               // Handle the event here.
                event.preventDefault();
    
                // El triangulo inferior no es editable
                if(event.columnIndex > 0 && event.columnIndex > event.rowIndex)
                {
                    //Buscar el rango que corresponde y actualizar su valor
                    selectedCell = dgLineRanges.dataProvider.getItemAt(event.rowIndex).getItemAt(event.columnIndex);
    
                    // Creates an item editor.                
                    dgLineRanges.createItemEditor(event.columnIndex,event.rowIndex);
    
                    // All item editors must implement the IDropInListItemRenderer interface
                    // and the listData property. 
                    // Initialize the listData property of the editor. 
                    IDropInListItemRenderer(dgLineRanges.itemEditorInstance).listData =
                        IDropInListItemRenderer(dgLineRanges.editedItemRenderer).listData;
    
                    // Copy the cell value to the TextInput control.
                    dgLineRanges.itemEditorInstance.data = dgLineRanges.editedItemRenderer.data;
    
                    // Copy the cell value to the RangeComboItemEditor control.
                    var rangeCombo:RangeComboItemEditor = dgLineRanges.itemEditorInstance as RangeComboItemEditor;
    
                    // Sólo permitimos editar si está prohibido (pero puede permitirlo)
                    rangeCombo.editable = !selectedCell.forbidden;
    
                    // Esta variable se tiene en cuenta a la hora de habilitar o no los botomes de prohibido 
                    enableForbidden(true);
    
                    // Establecer el foco
                    model.setRangeComboIEFocus(rangeCombo, !selectedCell.forbidden);
                }
                else
                {
                    enableForbidden(false);
                }
            }
    
    
            private function saveEditedData(event:DataGridEvent):void
            {
                // Check the reason for the event.
                if (event.reason == DataGridEventReason.CANCELLED || event.columnIndex == 0)
                {
                    // Do not update cell.
                    return;
                }
    
                // Guardamos indices de cela para facilitar posible tratamiento de botones
                // prohibido / permitodo
                lastRowIndex = event.rowIndex;
                lastColumnIndex = event.columnIndex;
    
                //Buscar el rango que corresponde
                var stopsRange:FareOriginDestDTO = dgLineRanges.dataProvider.getItemAt(event.rowIndex).getItemAt(event.columnIndex);
    
                if(stopsRange.saveAction == IfsConst.SAVE_ACTION_NONE)
                    stopsRange.saveAction = IfsConst.SAVE_ACTION_UPDATE;
    
    
                // Get the new data value from the editor.
                var newRangeCode:int= event.currentTarget.itemEditorInstance.code;
    
                //Actualizar su valor
                stopsRange.rangeCode = newRangeCode;
    
                //Actualizar "Forbidden"
                if (newRangeCode == -1)
                    stopsRange.forbidden = true;
                else
                    stopsRange.forbidden = false;
    
    
                // Simétrico (si no está en la diagonal)
                if( event.rowIndex != event.columnIndex-1 )
                {
                    stopsRange = dgLineRanges.dataProvider.getItemAt(event.columnIndex-1).getItemAt(event.rowIndex+1);
    
                    // Solo se cambia la celda simétrica si:
                    //  Celda principal es "Forbidden" y la simétrica también
                    //  Celda principal no es "Forbidden"                   
                    if ((newRangeCode == -1 && stopsRange.rangeCode == -1) || newRangeCode != -1)
                    {
                        if (stopsRange.saveAction == IfsConst.SAVE_ACTION_NONE)
                            stopsRange.saveAction = IfsConst.SAVE_ACTION_UPDATE;    
                        stopsRange.rangeCode = newRangeCode;
                    }
                }
    
                // Close the cell editor.
                dgLineRanges.destroyItemEditor();
    
                // Notify the list control to update its display.
                dgLineRanges.dataProvider.itemUpdated(event.itemRenderer.data);
    
                // Mandatory dataProvider refresh
                dgLineRanges.dataProvider.refresh();                
    
                // Disable copying data back to the control.
                //event.preventDefault();
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-12
      • 2012-02-10
      • 2011-03-04
      • 2011-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多