Сетка данных Flex не обновлена ​​должным образом - PullRequest
0 голосов
/ 19 июля 2011

У меня есть две таблицы: Person {pID, pName, deptID} и Departments {deptID, deptName} Подобный SQL-оператор возвращает мне имя человека и название отдела:

SELECT pName, departments.deptName FROM people INNER JOIN people.deptID = departments.deptID;

Выше работает нормально. У меня есть Flex DropDownList, который заполнен deptNames. Когда я нажимаю кнопку отправки, я могу без проблем получить идентификатор выбранного отдела:

protected function button_clickHandler(event:MouseEvent):void
   {
    person.pName=pNameTextInput.text;
    person.deptID=pDepartmentDropDownList.selectedItem.deptID; //ID of selected department obtained correctly.
    if (person.pID == 0)
    {
     createPersonResult.token=personService.createPerson(person);
    }
    else
    {
     updatePersonResult.token=personService.updatePerson(person);
    }
  }

У меня есть обработчик createPersonresult, который пытается обновить сетку данных при добавлении человека. Сетка данных обновляется новым добавленным человеком, но в столбце отдела я получаю идентификатор отдела, выбранный из раскрывающегося списка. Мне нужно перезагрузить флэш-приложение, чтобы обновить сетку данных для отображения deptName.

Чего-то не хватает в этом обработчике результатов createPerson. Google не предоставил особой помощи.

   protected function createPersonResult_resultHandler(event:ResultEvent):void
   {
    currentState="PeopleDetails";
    person.pID=event.result as int;
    peopleDg.dataProvider.addItem(person); //the problem might be here, more below.
    peopleDg.setSelectedIndex(peopleDg.dataProvider.getItemIndex(person));
    peopleDg.ensureCellIsVisible(peopleDg.selectedIndex);
   }

Из приведенного выше комментария я вижу, что добавление person действительно добавит атрибуты объекта person в сетку данных, за исключением того, что один атрибут представляет собой внешний идентификатор (deptID) из отделов.

Ответы [ 2 ]

0 голосов
/ 19 июля 2011

Я думаю, вам нужно установить свойство deptName, поскольку вы не получаете его из объединения, когда оно добавляется в интерфейс. Так что-то вроде этого должно сработать, я думаю?

РЕДАКТИРОВАТЬ: для выпадающего списка 4,5 вместо выпадающего списка

protected function button_clickHandler(event:MouseEvent):void
{
    person.pName=pNameTextInput.text;
    person.deptID=pDepartmentDropDownList.selectedItem.deptID; //ID of selected department obtained correctly.
    person.deptName = pDepartmentDropDownList.selectedItem.deptName;
    if (person.pID == 0)
    {
        createPersonResult.token=personService.createPerson(person);
    }
    else
    {
        updatePersonResult.token=personService.updatePerson(person);
    }
}
0 голосов
/ 19 июля 2011

Я подозреваю, что следующее: Ваше утверждение select выше выполняется только при первой инициализации / запуске приложения. Все, что вы добавляете после слов, не вызывает тот оператор выбора, который возвращает имя отдела, используя оператор соединения, и, следовательно, вы видите идентификатор только до следующей загрузки / инициализации всего приложения.

...