Tabela tworzy się dynamicznie na podstawie pobranych danych z bazy. Tutaj wszystko działa, pobieranie, dodawanie, usuwanie. Szukam jednak metody sparowania danych tabeli z danymi w bazie. Musi to być zrobione po kluczu. Klucz mam w pierwszej kolumnie. Musi mi pobrać wartość tego klucza, żeby później przenieść to do zapytania sql.
Pobiera mi wartość wiersza, ale ja potrzebuje pierwszej kolumny i zaznaczonego wiersza bez względu na to gdzie się kliknie ( mam kod który pobiera dokładnie wartość klikniętej komórki - a potrzebuje konkretnie klikniętego wiersza i KOLUMNY 1 ) Próbuje to zrobić w metodzie powody_usun Kod poniżej:
public class PowodyControler implements Initializable {
private MainControler mainControler;
@FXML private TableView lista_powod;
private ObservableList<ObservableList> data;
private TableView lista_powodModelos;
public void setMainControler(MainControler mainControler) {
this.mainControler = mainControler;
}
@Override public void initialize(URL url, ResourceBundle rb){
list_update();
}
@FXML public void powody_usun(){
int index;
index = lista_powod.getSelectionModel().getSelectedIndex();
TablePosition pos = (TablePosition) lista_powod.getSelectionModel().getSelectedCells().get(0);
int row = pos.getRow();
TableColumn col = pos.getTableColumn();
Object item = lista_powod.getItems().get(row);
String data = (String) col.getCellObservableValue(item).getValue();
// Delete delete = new Delete();
// try {
// delete.new_Value("jdbc:sqlserver://127.0.0.1:1433;databaseName=testowa;selectMethod=cursor","tester", "test", "DELETE FROM table1 WHERE lp= " +index+ " ");
// list_update();
// } catch (SQLException e) {
// e.printStackTrace();
// }
//
// list_update();
}
public void list_update(){
lista_powod.getColumns().clear();
Connection c;
data = FXCollections.observableArrayList();
try{
c = DBConnect.connect();
String SQL = "SELECT * FROM testowa";
ResultSet rs = c.createStatement().executeQuery(SQL);
for(int i=0 ; i<rs.getMetaData().getColumnCount(); i++){
final int j = i;
TableColumn col = new TableColumn(rs.getMetaData().getColumnName(i+1));
col.setCellValueFactory(new Callback<CellDataFeatures<ObservableList,String>,ObservableValue<String>>(){
public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) {
return new SimpleStringProperty(param.getValue().get(j).toString());
}
});
lista_powod.getColumns().addAll(col);
}
while(rs.next()){
ObservableList<String> row = FXCollections.observableArrayList();
for(int i=1 ; i<=rs.getMetaData().getColumnCount(); i++){
row.add(rs.getString(i));
}
data.add(row);
}
lista_powod.setItems(data);
}catch(Exception e){
e.printStackTrace();
}
}
}
Mogę całą linię wrzucić do kolekcji i wyciągnąć pierwszy element, ale czy to najlepszy sposób ?
TablePosition pos = (TablePosition) lista_powod.getSelectionModel().getSelectedCells().get(0);
Object item = lista_powod.getItems().get(pos.getRow());
Object e = ((List<ObservableList>) item).get(0);