Flex: удаление элемента из коллекции, привязанного к сетке данных, и обновление индекса выбранной сетки - PullRequest
0 голосов
/ 20 февраля 2011

У меня есть сетка данных с привязанным к ней xmlListCollection:

<mx:DataGrid id="dgCompetente" includeIn="Competente" x="10" y="66" width="547" height="468"
                 change="dgCompetente_changeHandler(event)" dataProvider="{colCompetente}"
                 editable="false">
        <mx:columns>
            <mx:DataGridColumn headerText="ID Competenţă" dataField="idCompetenta"/>
            <mx:DataGridColumn headerText="Denumire Competenţă" dataField="denCompetenta"/>
            <mx:DataGridColumn headerText="Competenţă Superioară" dataField="idCompSuperioara" labelFunction="labelFunctionCompetentaSuperioara"/>
        </mx:columns>
    </mx:DataGrid>

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

<s:Button id="btnDeleteCompetenta" includeIn="Competente" x="813" y="65" label="Stergere" click="deleteCompetenta()"/>


private function deleteCompetenta():void 
{
    try {
        var position:int = dgCompetente.selectedIndex;

        if (position >= 0) {
            colCompetente.removeItemAt(position);
            dgCompetente.selectedIndex = position;
        }

        clearEdit(fieldsCompetente);
        saveCompetente();
    } catch (error:Error) {
        errorHandler.defaultErrorHandler(error);
    }
}

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

Может кто-нибудь сказать мне, что мне не хватает?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 31 октября 2012

не работает selectedIndex не обновляется с хорошим значением также в updateCompleteHandler но со значением -1, если значение силы + 1, принять значение + 2, и выбор ускользнет от щелчка, так что он точно такой же.

1 голос
/ 20 февраля 2011

Вы, вероятно, сбрасывает selectedIndex слишком рано, до обновления DataGrid, но трудно сказать точно, так как ваш код вызывает несколько функций. Попробуйте это

Добавьте переменную "кэшированная позиция", например:

protected var cachedPosition : int;

Затем измените ваш метод deleteCompetenta

private function deleteCompetenta():void 
{
    try {
        cachedPosition = dgCompetente.selectedIndex;

        if (position >= 0) {
            colCompetente.removeItemAt(position);
//            don't reset this here
//            dgCompetente.selectedIndex = position;
        }

        clearEdit(fieldsCompetente);
        saveCompetente();
    } catch (error:Error) {
        errorHandler.defaultErrorHandler(error);
    }
}

Затем добавьте updateCompleteHander в DataGrid:

<mx:DataGrid id="dgCompetente" includeIn="Competente" x="10" y="66" width="547" height="468"
                 change="dgCompetente_changeHandler(event)" dataProvider="{colCompetente}"
                 editable="false" updateComplete="updateCompleteHandler(event)">

И сбросить выбранный индекс при обновлении CompleteHandler:

protected function updateCompleteHandler(event:Event):void{
// reset here
 dgCompetente.selectedIndex = cachedPosition;
}

Это решило бы это?

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