3

現在、SQL Server データベースのデータを表示するために JavaFX を使用しています。データベース内の 1 つのテーブルの内容に基づいて TableView を作成しました。データベース テーブルは Products のコレクションであるため、TableView 宣言は次のようになります。

@FXML
private TableView<Products> productTable;

そして、TableView の各行は次のように宣言されます。

@FXML
private TableColumn<Products, String> productName;

各列には、データをデータベースから列にマップする PropertyValueFactory を含む ValueFactory があります。ここで、製品とコスト テーブルの間には 1 対 1 の関係があるため、テーブルに 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

問題に適用できる別の解決策は、2つのテーブルのデータをJDBCに接続されたRowSetオブジェクトに結合し、jdbcRowSetオブジェクトをTableViewのデータのソースとして使用することです。必要な両方のテーブルのデータを1つの行セットオブジェクトに結合できるSQLクエリを簡単に作成できます。

データベースからTableViewにデータをマッピングする代わりに、行セットオブジェクトからTableViewにマッピングします。当然、このソリューションは、データベースに対してSQLクエリを自分で実行できる場合にのみ使用できます。データアクセスオブジェクトまたは他のCRUDメソッドを介したデータベースへのアクセスに制限されている場合、これはあなたのケースでは機能しません。

于 2013-02-27T02:14:50.713 に答える