Javafx đổ dữ liệu vào TableView khi kết 2 bảng trong cơ sở dữ liệu

CSDL em dùng là mySQL
Phần đổ dữ liệu từ database vào tableView, nếu như chỉ đổ 1 bảng từ csdl vào tableview thì không có gì. Nhưng em đang muốn kết 2 hoặc 3 bảng trong csdl lại rồi đổ vào 1 tableview thì lại gặp rất nhiều khó khăn.
Vì mỗi lần đổ dữ liệu từ database vào tableview thì phải tạo 1 class tương ứng 1 bảng trong csdl và khai báo một Observablelist < tên class> mà cái Observablelist này chỉ được định nghĩa 1 class. Vậy khi em kết 2 bảng trong csdl nó đâu còn là cái class đó, em đang bí chỗ này… Mong các bác giúp em , nếu có control khác hỗ trợ tốt hơn thì cũng được

Chào bạn,
Nếu bạn kết dữ liệu từ nhiều bảng bạn chỉ việc tạo ra object chứa tất cả thuộc tính từ các bảng mà bạn muốn lấy. Sau đó đổ vào TableView là được.
Bạn có thể tham khảo ví dụ thêm xóa sửa TableView JAVAFX
Nếu bạn gặp phải vấn đề gì có thể liện hệ mình.
Chúc bạn thành công!

2 Likes

Cách của bác em đã test và chạy ok, mà nó có cách nào như thằng winform C# ấy, return về 1 datatable xong đổ vào trực tiếp vào table luôn ấy??

Khi bạn query xong trả về ResultSet
ObservableList add rs vào
Không biết có đúng ý bạn nói không?

à không bác ơi, cái em nói là bên C# winform, còn cái ObservableList add rs vào thì em đang dùng, xài ok, tuy hơi khó khăn, phải tạo 1 object mỗi lần kết bảng

Bạn thử cách này chưa ObservableList <'ObservableList '> không cần phải tạo đối tượng khi kết bảng.

em không làm được bác ơi, nếu không có object, thế lúc bác add trực tiếp ResultSet như thế nào?

private ObservableList< ObservableList > data = FXCollections.observableArrayList();
private TableView tableview;
//add column
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());
                    }
                });
                tableview.getColumns().addAll(col);
            }
//add row
while (rs.next()) {
                ObservableList<String> row = FXCollections.observableArrayList();
                int columnCount = rs.getMetaData().getColumnCount();
                for (int i = 1; i <= columnCount; i++) {
                    row.add(rs.getString(i));
                }
                data.add(row);
            }
tableview.setItems(data);

Bạn thử xem sao?

Nó báo lỗi dòng này .NullPointerException

à thôi, em fix đc bug rồi, h chạy ngon lành trơn tru hết rồi, cám ơn bác nhiều nhé

1 Like

A post was merged into an existing topic: Topic lưu trữ các post off-topic - version 3

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?