SmartGWT ListGridRecord проблема программного редактирования - PullRequest
0 голосов
/ 02 января 2012

Я использую smartgwt, и у меня есть ListGrid, в котором у меня есть некоторые заполненные значения в ListGridRecord. Теперь, если я устанавливаю какое-либо значение поля listGridRecord программно через setAttribute (String fieldName, String value) и обновляю поле через ListGridRecord.refreshFields (), тогда значения отражаются в пользовательском интерфейсе. но проблема в том, если я редактирую тот же ListGridRecord двойным щелчком мыши. затем значение теряется или удаляется из пользовательского интерфейса.

class FieldRecord extends ListGridRecord{

private int id;
private String name;

public void setID(Long id) {
  setAttribute(Constant.ID, id);
 }

public void setName(String name) {
  setAttribute(Constant.NAME, name);
 }

public Long getID() {
  return getAttribute(Constant.ID);
 }

public String getName() {
   return getAttribute(Constant.NAME); 
 }
}


class testData {
  FieldDataSource fieldDS = new FieldDataSource();

  FieldRecord fieldRec = new FieldRecord();
  //set some default value of record.

  fieldDS.addData(fieldRec);
  FieldGrid fieldGrid = new FieldGrid();
  fieldGrid.setDataSource(fieldDS);

  public void parseValue(){
  // on some condition
   fieldRec.setAttribute(Constant.NAME, "high"); 
  // programmaticaly set record value and that value is removed when i double click on 
   that record. 
 }
}

1 Ответ

1 голос
/ 02 января 2012

Я надеюсь, что FieldGrid является ListGrid.

Вы должны использовать setFields, чтобы прикрепить ListGridRecord к ListGrid

fieldGrid.setFields(fieldRec);

Попробуйте установить для autoSaveEdits ListGrid / FieldGrid значение false.

fieldGrid.autoSaveEdits(false);

Установка autoSaveEdits false создает взаимодействие «массовое обновление» / «массовое удаление», где изменения будут сохраняться для всех отредактированных ячеек (по строкам, если необходимо), пока не будет вызван ListGrid.saveEdits для сохранения определенногоrow или ListGrid.saveAllEdits вызывается для сохранения всех изменений в пакете.

Обновление

Используйте addRowEditorExitHandler для ListGrid и явно устанавливайте новые значения, как показано ниже

       addRowEditorExitHandler(new RowEditorExitHandler() {

          @Override
          public void onRowEditorExit(final RowEditorExitEvent event) {
            if (event.getRecord() != null) {
              Record gridRecord = event.getRecord();
              //This will be an update operations
            }
            else {
              gridRecord = new Record();
              //This will be a new record creation
            }
            if (FieldGrid.this.validateRow(event.getRowNum())) {
              for (Object attribute : event.getNewValues().keySet()) {
                //Here you will be able to see all the newly edited values
                gridRecord.setAttribute(String.valueOf(attribute),  event.getNewValues().get(attribute));
              }
//Finally you will have a record with all unsaved values.Send it to server
              addData(gridRecord);
            }
          }
        });
...