2011-07-22 12 views
0

セルで編集できるlistgidを作った。 テスト用に保存ボタンを追加しました。保存ボタンをクリックすると、リストグリッドの最初のレコード(最初の行の最初の列の値が更新されます)がポップアップに表示されますが、ポップアップで更新された値が表示されません。smartgwt - セルでリストグリッドを編集するときに問題が発生する

たとえば、この場合、最初のリストグリッドレコード名 - > jonがあります。私はshobhitにjonを編集してから、保存ボタンをクリックします。保存ボタンをクリックした後、私はshobhitという名前を取得する必要がありますが、古い値であるjonを表示しています。

私のコードの下を見て、この面白い仕事を達成するのを手伝ってください。

public void onModuleLoad() { 

    VLayout vLayout = new VLayout(10); 

    final ListGrid listGrid = new ListGrid(); 

    ListGridField nameField = new ListGridField("name","Name"); 
    nameField.setWidth(100); 
    nameField.setAlign(Alignment.CENTER); 

    ListGridField ageField = new ListGridField("age","Age"); 
    ageField.setWidth(100); 
    ageField.setAlign(Alignment.CENTER); 


    ListGridField locationField = new ListGridField("location","Location"); 
    locationField.setWidth(100); 
    locationField.setAlign(Alignment.CENTER); 

    listGrid.setFields(nameField, ageField, locationField); 
    listGrid.setDataSource(getDS()); 
    listGrid.setWidth(310); 
    listGrid.setHeight(224); 
    listGrid.setAutoFetchData(true); 
    listGrid.setCanEdit(true); 
    listGrid.setEditEvent(ListGridEditEvent.CLICK); 
    listGrid.setEditByCell(true); 

    vLayout.addMember(listGrid); 

    IButton saveButton = new IButton("Save"); 
    saveButton.addClickHandler(new ClickHandler() { 

     @Override 
     public void onClick(ClickEvent event) { 
      ListGridRecord[] record = listGrid.getRecords(); 
      Record r = record[0]; 
      SC.say(r.getAttributeAsString("name")); 
     } 
    }); 

    vLayout.addMember(saveButton); 

    RootPanel.get("gwtContent").add(vLayout); 
} 

private RestDataSource getDS() { 

    RestDataSource ds = new RestDataSource(); 

    DataSourceTextField nameField=new DataSourceTextField("name", "Name"); 
    DataSourceIntegerField ageField=new DataSourceIntegerField("age", "Age"); 
    DataSourceTextField locationField=new DataSourceTextField("location", "Location"); 

    ds.setFields(nameField, ageField, locationField); 

    ds.setDataFormat(DSDataFormat.JSON); 

    OperationBinding fetchOB = new OperationBinding(); 
    fetchOB.setOperationType(DSOperationType.FETCH); 

    OperationBinding addOB = new OperationBinding(); 
    addOB.setOperationType(DSOperationType.ADD); 
    addOB.setDataProtocol(DSProtocol.POSTPARAMS); 

    OperationBinding updateOB = new OperationBinding(); 
    updateOB.setOperationType(DSOperationType.UPDATE); 
    updateOB.setDataProtocol(DSProtocol.POSTPARAMS); 

    OperationBinding removeOB = new OperationBinding(); 
    removeOB.setOperationType(DSOperationType.REMOVE); 
    removeOB.setDataProtocol(DSProtocol.POSTPARAMS); 

    ds.setOperationBindings(fetchOB, addOB, updateOB, removeOB); 

    if (!GWT.isScript()){ 
     ds.setFetchDataURL("data/dataIntegration/json/data-fetch.js"); 
     ds.setJsonRecordXPath("response/data"); 
    }else{ 
    } 
    return ds; 
}  

JSONデータファイル:

{ 
response: { 
    status: 0, 
    startRow: 0, 
    endRow: 4, 
    totalRows: 5, 
    data: [ 
      {"name":"Jon", "age":40, "location":"USA"}, 
      {"name":"Tom", "age":30, "location":"USA"}, 
      {"name":"Frank", "age":35, "location":"USA"}, 
      {"name":"Deb", "age":24, "location":"USA"}, 
      {"name":"Leroy", "age":70, "location":"USA"} 
    ] 
} 
} 

答えて

1

listgrid.Thisは、保存ボタンを必要としないためaddRowEditorExitHandlerを使用してください。 変更を加えてグリッドの外側のどこかをクリックすると、コントロールは自動的にaddRowEditorExitHandlerになります。

ListGrid listGrid = new ListGrid(); 
listGrid.setCanEdit(true); 
listGrid.setAutoSaveEdits(false); 
listGrid.setDataSource(getDS()); 
listGrid.addRowEditorExitHandler(new RowEditorExitHandler() { 

     @Override 
     public void onRowEditorExit(final RowEditorExitEvent event) { 
     SC.say(event.getNewValues().get("name")); 
     //event.getNewValues gives a map of unsaved edits in edited row 
     //This values u can put to a new record and save it 
     } 
    }); 
関連する問題