2013-04-17 69 views
3

小區選擇單元格編輯器類型反正是有定義GXT 3.0通過基於單元的單元編輯器類型?GXT 3.X EditorGrid:對小區的基礎

我需要創建一個轉置表;列成爲行,行成爲列。既然如此,一列(從普通表格的角度來看)將會有各種編輯器類型,其中一行將具有相同的編輯器類型。

我嘗試使用下面的方法 - 這似乎是工作的罰款,並允許開闢根據數據類型的編輯,但是當我點擊了;它不關閉/隱藏編輯器。

我會很感激,如果有人可以請點我在正確的方向。

final GridInlineEditing<MyModel> editing = new GridInlineEditing<MyModel>(mygrid){ 
     @SuppressWarnings("unchecked") 
    @Override public <O> Field<O> getEditor(ColumnConfig<MyModel, ?> columnConfig) { 
     if(valueColumnName.equals(columnConfig.getHeader().asString())) { 
       MyModel myModel = tree.getSelectionModel().getSelectedItem(); 
      if(MyModelType.STRING.equals(myModel.getMyModelType())) { 
       TextField textField = new TextField(); 
       textField.setAllowBlank(Boolean.FALSE); 
       return (Field<O>) textField; 
      } 
      else { 
       TextArea textField = new TextArea(); 
       textField.setAllowBlank(Boolean.FALSE); 
       return (Field<O>) textField; 
      } 
     } 
     return super.getEditor(columnConfig); 
    } 
}; 
editing.setClicksToEdit(ClicksToEdit.TWO); 

PS: 這類似於以下質疑;但回答僅限於發佈GXT 3.0。我是新來的stackoverflow,似乎建議創建新的問題,而不是添加新的帖子到舊線程。 GXT EditorGrid: choose cell editor type on a cell by cell basis

回答

0

我認爲你沒有看到字段沒有關閉的原因是你實際上並沒有將它們添加到GridInlineEditing類中。

在你有以下return語句的部分;

return (Field<O>) textField; 

這些文本框都沒有被加入到網格。

我會嘗試替換爲你的前兩個return語句下面的代碼;

super.addEditor(columnConfig, (Field<O>) textField; 

這增加了編輯器通過AbstractGridEditing使用的一些地圖。具體而言,在GridInlineEditing.doCompleteEditing()GridInlineEditing.cancelEditing()中使用的AbstractGridEditing.removeEditor(GridCell, Field<?>)方法需要字段位於地圖中,以便它可以從其父項分離。

+0

謝謝你的快速反應。我試過但沒有運氣;行爲仍然是一樣的。 另外,removeEditor()是一個私有方法;所以我試着用相同的邏輯實現我自己,並明確地調用它,但這也沒有幫助。 – user2292653

+0

因此,你添加了代碼來設置他們的父母爲空,並從DOM分離,但他們仍然存在?這聽起來不對。 – Jonathan

+0

是的;真奇怪。無論如何,我們知道了。嘿!感謝您指點「super.addEditor(columnConfig,(Field )textField;」。這很有幫助:)再次感謝。 – user2292653

3

玩了一整天后,我的同事(Praveen)和我發現了它。因此,不要試圖覆蓋GridInlineEditing的getEditor()方法覆蓋startEditing()方法。此外,如果您有像日期,列表等數據,您將需要轉換器。下面是示例代碼;希望這有助於他人。

final GridInlineEditing<MyModel> editing = new GridInlineEditing<MyModel>(tree){ 
      @Override public void startEditing(GridCell cell) { 
       MyModel myModel= tree.getSelectionModel().getSelectedItem(); 
       if(MyModelType.TEXT.equals(myModel.getContextVariableType())) { 
        TextArea textField = new TextArea(); 
        textField.setAllowBlank(Boolean.FALSE); 
        super.addEditor(valueColumn, textField); 
       } 
       else if(MyModelType.BOOLEAN.equals(myModel.getContextVariableType())) { 
        SimpleComboBox<String> simpleComboBox = new SimpleComboBox<String>(new StringLabelProvider<String>()); 
        simpleComboBox.setTriggerAction(TriggerAction.ALL); 
        simpleComboBox.add("YES"); 
        simpleComboBox.add("NO"); 
        super.addEditor(valueColumn, simpleComboBox); 
       } 
       else if(MyModel.INTEGER.equals(myModel.getContextVariableType())) { 
        SpinnerField<Integer> spinnerField = new SpinnerField<Integer>(new IntegerPropertyEditor()); 
        spinnerField.setIncrement(1); 
        Converter<String, Integer> converter = new Converter<String, Integer>(){ 
         @Override public String convertFieldValue(Integer object) { 
          String value = ""; 
          if(object != null) { 
           value = object.toString(); 
          } 
          return value; 
         } 
         @Override public Integer convertModelValue(String object) { 
          Integer value = 0; 
          if(object != null && object.trim().length() > 0) { 
           value = Integer.parseInt(object); 
          } 
          return value; 
         } 
        }; 
        super.addEditor(valueColumn, converter, (Field)spinnerField); 
       } 
       else { 
        TextField textField = new TextField(); 
        textField.setAllowBlank(Boolean.FALSE); 
        super.addEditor(valueColumn, textField); 
       } 
       super.startEditing(cell); 
      } 
     }; 
     editing.setClicksToEdit(ClicksToEdit.TWO);