01/10/2018, 15:12

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

luubiit viết 17:14 ngày 01/10/2018

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!

X Quochunghero viết 17:14 ngày 01/10/2018

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.

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??

luubiit viết 17:14 ngày 01/10/2018

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?

X Quochunghero viết 17:21 ngày 01/10/2018

à 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

luubiit viết 17:14 ngày 01/10/2018

ObservableList

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.

X Quochunghero viết 17:28 ngày 01/10/2018

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?

luubiit viết 17:27 ngày 01/10/2018

ếu không có object, thế lúc bác add trực tiếp ResultSet như thế nà

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?

X Quochunghero viết 17:19 ngày 01/10/2018

return new SimpleStringProperty(param.getValue().get(j).toString());

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

X Quochunghero viết 17:24 ngày 01/10/2018

String

à 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é

Bài liên quan
0