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?
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);
}
};
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
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
Ja, es hat funktioniert! – Papadakis