обновление ячейки кнопок GWT (GXT) в сетке во время выполнения

#gwt #gxt

#gwt #gxt

Вопрос:

Я создаю ячейку кнопок в GXT Grid и добавляю ячейку в свой столбец сетки следующим образом

   myCol.setCell(getButtonCell());
  

Теперь все ячейки отрисованы, после этого зависит от вызова сервера, я хочу обновить свою ячейку новым значением MyDTO.

Итак, при успешном выполнении RPC я хочу вызвать этот рендеринг для всех моих ячеек и обновить там значения. Как я могу этого добиться.

 public ButtonCell<MyDTO> getButtonCell()
{
    ButtonCell<MyDTO> cellTest = new ButtonCell<MyDTO>()
    {

        @Override
        public void render(Context context, MyDTO value, SafeHtmlBuilder 
      sb)
        {
           sb.appendHtmlConstant(value.getName());
        }
  

Ответ №1:

В сетке Sencha GXT используется хранилище списков. Чтобы отобразить новые данные внутри grid, хранилище необходимо обновить. Это можно сделать, вызвав store.addAll(theNewDataList) . Не забывайте очищать хранилище перед добавлением новых значений.

Обновление хранилища приведет к перерисовке сетки. Во время перерисовки будет вызван render -метод ButtonCell . Чтобы изменить расположение кнопки, реализуйте внутри render -метода то, что вы хотите сделать.

Это пример из Sencha GXT Explorer (https://examples.sencha.com/gxt/examples/#ExamplePlace:grid_aggregationgrid ):

       final NumberFormat numberFormat = NumberFormat.getFormat("0.00");
      changeColumn.setCell(new PropertyDisplayCell<Double>(new DoublePropertyEditor(numberFormat)) {
        @Override
        public void render(com.google.gwt.cell.client.Cell.Context context, Double value, SafeHtmlBuilder sb) {
          String style = value < 0 ? "red" : "green";
          sb.appendHtmlConstant("<span style='color:"   style   "'>");
          super.render(context, value, sb);
          sb.appendHtmlConstant("</span>");
        }
      });
  

В случае, если значение меньше 0, строка будет отображаться красной, в противном случае — зеленой.

Надеюсь, это поможет.

Комментарии:

1. этот ответ правильный, кроме того, если вы хотите также изменить его стиль, вы также можете setStyleName , который переопределит старый css элемента