TableView - wartość z określonej komórki

0

Cześć,

Mam powiązaną tabelę (TableView) w JavieFX z SQLem. W pierwszej kolumnie mam klucz i najlepszym sposobem na powiązanie danych wydaje mi się posługiwanie się właśnie tą wartością. I tutaj mam problem.

Umiem pobrać wartość z zaznaczonej komórki, ale mnie interesuje pobranie wartości z kolumny pierwszej zaznaczonego wiersza. I o ile wartość wiersza mam o tyle kolumny nie. Chce po prostu takie coś jak w VB items = Cells(1,1).Value.

W związku z czym gdy chce zmienić wartość w bazie danej nie mam jak się odwołać.

0

Może jakiś kawałek kodu? jak definiujesz tabelkę? Jak pobierasz to co działa i gdzie coś nie działa?

0

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);
0

Z getSelectionModel() nie dostaniesz nic co nie jest zaznaczone.

Podejście z lista_powod.getItems().get(pos.getRow()); może nie działać, jak zmienisz kolejność wyświetlania elementów w liście. Polecam sprawdzić.
Może napisz swój komponent który implementuje ObservableValue i trzyma też twoje ID?

1 użytkowników online, w tym zalogowanych: 0, gości: 1