Вложенная сетка данных: установка фокуса на внутреннюю сетку данных - PullRequest
0 голосов
/ 06 декабря 2010

У меня есть сетка данных с одним столбцом, отображаемым с другой сеткой данных. Я делаю это, чтобы реализовать отображение в виде строки (с hbox под дочерней сеткой данных), показывающее сообщения под каждой строкой. Когда я вкладываю и достигаю конца строки, я хочу, чтобы фокус перешел на следующую строку, то есть на следующую дочернюю сетку данных и на конкретную ячейку этой строки. Это упрощенный код, вызывающий рендерер:

<mx:DataGrid width="100%"
                 showHeaders="false"
                 selectable="false"
                 id="ParentDatagrid"
                 dataProvider="{arrayActs}"
                 paddingBottom="0" paddingTop="0"
                 variableRowHeight="true">
        <mx:columns>
            <mx:DataGridColumn itemRenderer="components.ColumnRendererDatagrid"/>
        </mx:columns>
    </mx:DataGrid>

И код рендерера (ColumnRendererDatagrid):

<mx:DataGrid 
    id="dgLocal" width="100%" height="23" borderSides=""
    dataProvider="{data}" showHeaders="false"
    editable="true" selectable="false">
    <mx:columns>
        <mx:DataGridColumn />
        <mx:DataGridColumn />
        <mx:DataGridColumn />
        <mx:DataGridColumn />
        <mx:DataGridColumn />
    </mx:columns>
</mx:DataGrid>
<mx:HRule width="100%" />
<mx:Label id="message" text="Error Message" width="100%" />

На данный момент я использую следующий фрагмент в ColumnRendererDatagrid, чтобы проверить, когда табуляция достигает конца строки, и всплыть событие:

if(dgLocal.editedItemPosition.columnIndex == 13){
                dispatchEvent(new Event(MOVE_FOCUS_DOWN, true));

Оттуда я борюсь за то, как развернуть рендерер, чтобы установить фокус, как только более высокий компонент получит это событие. Любая помощь могла бы быть полезна. Thx

1 Ответ

0 голосов
/ 06 декабря 2010

Хорошо, вот решение, которое я придумал.Это код в обработчике событий родителя (обрабатывающий MOVE_FOCUS_DOWN):

//Find the postition of the item that sent the event :
for each( var row:Object in ParentDatagrid.dataProvider ) {     
                if( (event.target as ColumnRendererDatagrid).data == row) {
                    break;
                }
                i++;
            } 

//Get the renderer of the next item :
  var render:IListItemRenderer = ParentDatagrid.itemToItemRenderer(arrayActes.getItemAt(i+1));
  (render as ColumnRendererDatagrid).dgLocal.editedItemPosition = {rowIndex:0, columnIndex:1}

(очевидно, что в реальном коде нужно проверить, чтобы увидеть, существует ли следующий объект), который имеет тип ColumnRendererDatagrid.Оттуда я просто установил фокус / позицию редактирования.

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