2017-09-12 1 views
0

Ich versuche, eine Anwendung zu entwickeln, die eine Flex-Tabelle dynamisch aus der Datenbank mit JDBC erstellt. Ich möchte zwei Methoden implementieren, eine zum Aktualisieren von Zeilenwerten und eine zum Löschen der aktuellen Zeile durch Einfügen von zwei Schaltflächen pro Zeile. Das Problem ist, dass ich die aktuellen Zeilenwerte nicht bekommen kann.Wie erhalten Sie Zeilenwerte von dynamischen FlexTable in GWT?

Here is a picture

FishTable Methode, die Flextable

public void FishTable(){ 
    if(service == null){ 
     service = GWT.create(Service.class); 
    } 

    service.getFishes(FishTableCallBack); 
} 

AsyncCallback FishTableCallBack = new AsyncCallback() {

@Override 
    public void onFailure(Throwable caught) { 
     String details = caught.getMessage(); 

     System.out.println(details); 
    } 

    @Override 
    public void onSuccess(FishTable result) { 

     table.removeAllRows();   
     tablePanel.clear(); 

     table.setText(0, 0, "id"); 
     table.setText(0, 1, "Fish"); 
     table.setText(0, 2, "Price"); 
     table.setCellPadding(6); 
     table.getCellFormatter().addStyleName(0, 0, "header1_3"); 
     table.getCellFormatter().addStyleName(0, 1, "header2"); 
     table.getCellFormatter().addStyleName(0, 2, "header1_3"); 

     tablePanel.add(table); 

     for (int i = 0; i < result.getIdArray().length; i++) { 

      Button updateBtn = new Button("update"); 
      Button deleteBtn = new Button("delete"); 

      id = new TextBox(); 
      id.setText(result.getIdArray()[i]); 
      id.addStyleName("fishId"); 
      id.setReadOnly(true); 

      name = new TextBox(); 
      name.setText(result.getNameArray()[i]); 

      price = new TextBox(); 
      price.setText(result.getPriceArray()[i]); 
      price.addStyleName("fishId"); 


      int row = table.getRowCount(); 

      table.setWidget(row, 0, id); 
      table.setWidget(row, 1, name); 
      table.setWidget(row, 2, price); 
      table.setWidget(row, 3, updateBtn); 
      table.setWidget(row, 4, deleteBtn); 


      updateBtn.addClickHandler(new ClickHandler() { 

       @Override 
       public void onClick(ClickEvent event) { 

        UpdateFish(id.getText() , name.getText() , price.getText()); 

       } 
      }); 

      deleteBtn.addClickHandler(new ClickHandler() { 

       @Override 
       public void onClick(ClickEvent event) { 

        index = table.getCellForEvent(event).getRowIndex()-1;      

        DeleteFish(table.getText(index, 0)); 

       } 
      }); 
     } 

    } 


}; 

-Code innerhalb updateBtn Handler, i funktioniert nicht schafft nimmt Werte aus der letzte Reihe. Ich versuchte Index = table.getCellForEvent (Ereignis) .getRowIndex() - 1, um die aktuelle Reihe zu erhalten, aber ich kann nicht den Wert von Spalte 0 innerhalb des updateBtn Handlers erhalten. Ich möchte diese Werte an die Datenbank senden. Also, wie könnte ich die Werte aus der Reihe bekommen, dass ich diese Knöpfe klicke?

UpdateFish und DeleteFish Methoden:

public void DeleteFish(String id){ 
    if(service == null){ 
     service = GWT.create(Service.class); 
    } 

    service.deleteFish(id, deleteFishCallBack); 
} 

public void UpdateFish(String fishId , String fishName , String fishPrice){ 
    if(service == null){ 
     service = GWT.create(Service.class); 
    } 

    service.updateFish(fishId , fishName , fishPrice , updateFishCallBack); 
} 

AsyncCallback<DeleteFish> deleteFishCallBack = new AsyncCallback<DeleteFish>() { 

    @Override 
    public void onSuccess(DeleteFish result) {   
     FishTable(); 
    } 

    @Override 
    public void onFailure(Throwable caught) { 
     String details = caught.getMessage(); 

     System.out.println(details); 

    } 
}; 

AsyncCallback<UpdateFish> updateFishCallBack = new AsyncCallback<UpdateFish>() { 

    @Override 
    public void onSuccess(UpdateFish result) { 
     FishTable(); 
    } 

    @Override 
    public void onFailure(Throwable caught) { 
     String details = caught.getMessage(); 

     System.out.println(details); 

    } 
}; 

Antwort

0

int row = table.getRowCount(); 

mit

final int row = table.getRowCount(); 

ersetzen und dann tun

deleteBtn.addClickHandler(new ClickHandler() { 

    @Override 
    public void onClick(ClickEvent event) { 
     TextBox tb = (TextBox) table.getWidget(row - 1, 0); 
     DeleteFish(tb.getText()); 
    } 
}); 
+0

Es funktioniert nicht. Ich denke, es gibt ein Problem mit der table.getText() -Methode, weil ich versucht habe, diesen Wert zu drucken, und es gibt nichts aus. Auch ich habe diese Zeile in DeleteFish geändert (table.getText (row - 1, 0)); weil ich die erste Spalte möchte. – Papadakis

+0

Sie setzen TextBox-Widgets in Ihre FlexTable. Sie müssen also getWidget verwenden, um die TextBox zurück zu bekommen. Und dann benutze getText auf der TextBox ----- Aktualisierte meine Antwort mit diesen Änderungen – Knarf

+0

Ja, es hat funktioniert! – Papadakis

Verwandte Themen