3

我目前正在使用 JavaFX 显示来自 SQL Server 数据库的数据。我根据数据库中一个表的内容创建了一个 TableView。数据库表是 Products 的集合,所以 TableView 声明为:

@FXML
private TableView<Products> productTable;

TableView 中的每一行都声明如下:

@FXML
private TableColumn<Products, String> productName;

每列都有一个 ValueFactory,其中包含一个 PropertyValueFactory,它将数据从数据库映射到列。现在我真正想做的是让我的表包含来自 2 个数据库表的数据,因为产品和成本表之间存在一对一的关系。但是,我还没有找到一个聪明的方法来做到这一点。

有人有什么建议或想法吗?

4

2 回答 2

2

如果您已经定义了 Products 模型与这些表模型的关系,则可以编写自定义单元格值工厂。在下面的代码中,“产品的成本和模型”列使用 2 个相关的表格模型来呈现其单元格,即成本和模型。

TableColumn<Person, String> costAndModelCol = new TableColumn<Person, String>("Cost and Model of the product");
costAndModelCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person, String>, ObservableValue<String>>() {
    public ObservableValue<String> call(TableColumn.CellDataFeatures<Person, String> p) {
        return SimpleStringProperty(p.getValue().getCost().getValue() + " (model: "+ p.getValue().getModel().getYear() +")");
    }
});
于 2012-12-20T19:34:27.927 回答
1

另一个可能适用于您的问题的解决方案是将两个表中的数据组合成一个 JDBC 连接的 RowSet 对象,然后使用 jdbcRowSet 对象作为 TableView 的数据源。您可以轻松编写一个 SQL 查询,将您需要的两个表中的数据组合到一个行集对象中。

不是将数据从数据库映射到 TableView,而是从行集对象映射到 TableView。当然,只有当您能够自己对数据库执行 SQL 查询时,才能使用此解决方案。如果您仅限于通过数据访问对象或其他 CRUD 方法访问数据库,那么这不适用于您的情况。

于 2013-02-27T02:14:50.713 回答