Итерация по всем строкам в ADF richtable - PullRequest
2 голосов
/ 06 октября 2011

У меня есть таблица, которая отображает два столбца из таблицы и третий с флажками, которые пользователь может установить и снять.

Рядом находится кнопка отправки изменений, при нажатии этой кнопки я хочу выполнить итерацию внизСтроки таблицы и в зависимости от статуса галочки выполняют различные действия.Прямо сейчас таблица не может быть выбрана.

Я возился с этим уже более суток и думаю, что мне, возможно, придется просто перейти на таблицу множественного выбора АПД и вместо столбцафлажки просто позволяют пользователю выбирать, снимать выделение и использовать коллекцию selectedrows для принятия действий.

Есть идеи?

1 Ответ

3 голосов
/ 07 октября 2011

Я придумал работу, которая не слишком грязная. Учитывая, что в любое время вы можете получить набор выбранных строк из объекта RichTable, я решил, что могу временно установить все выбранные строки и получить набор выбранных строк.

ПРЕДУПРЕЖДЕНИЕ. В моем текущем приложении таблица, с которой я имею дело, не разрешает выделение, поэтому мне не нужно беспокоиться об очистке выделения, поскольку оно выбрасывается после завершения обновления.

    // set all rows in the table to selected so they can be iterated through
    selectAllRowsInTable( rolesGrantedAndAvailableTable );
    RowKeySet rSet = rolesGrantedAndAvailableTable.getSelectedRowKeys();

    Iterator selectedEmpIter = rSet.iterator();
    DCBindingContainer bindings = (DCBindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry();
    DCIteratorBinding roleIter = bindings.findIteratorBinding("usersGrantedAndAvailableRolesView1Iterator");
    RowSetIterator roleRSIter = roleIter.getRowSetIterator();

    // iterate through all rows checking checkmark status and deciding if the roles need to be granted, revoked, or no action be taken
    while(selectedEmpIter.hasNext())
    {
        // Do your stuff with each row here
    }

функция для выбора всех строк, которые я нашел в AMIS blogs is

public void selectAllRowsInTable( RichTable rt )
{
      RowKeySet rks = new RowKeySetImpl();
      CollectionModel model = (CollectionModel)rt.getValue();
      int rowcount = model.getRowCount();

      for( int i = 0; i < rowcount; i++ )
      {
            model.setRowIndex(i);
            Object key = model.getRowKey();
            rks.add(key);
      }

      rt.setSelectedRowKeys(rks);
}
...