1

私が達成しようとしているのは次のとおりです。データベースからの値を含むドロップダウンリストがあります。WorkingUnits に関連付けるマテリアルがいくつかあります。そのため、WorkingUnit に必要な数の Material を割り当てることができるだけでなく、2 つの異なる WorkingUnit に 1 つの同じマテリアルを割り当てることもできます (そうしたい場合に備えて)。ここまではうまくいきましたが、追加で実現したいのは、作業単位ごとに既に選択されているマテリアルを除外して、ユーザーがそれらを再度選択できないようにすることです。

即興テーブルの関係:

|Materials|1 --------- * |MaterialWorkingUnitMap| * ----------- 1 |WorkingUnit|

些細なことを尋ねているのかもしれませんが、今のところこれを理解できません。説明されている動作によると、関係は間違っていますか? 私によると、それらは理にかなっていますが、私は LightSwitch にまったく慣れていません。

別の解決策は、ユーザーが同じマテリアルを選択した場合に備えて、いくつかの検証も含めることです。これはあまり望ましくないアプローチですが、私も満足していると思います。

4

2 に答える 2

2

これが役立つことを願っています。

Materials テーブルに移動し、"UnusedMaterialsByWorkingUnit" という名前の新しいクエリを作成します。このクエリでは、1 つのパラメーターを追加します: Integer 型のパラメーター WorkingUnitID。[コードの記述] ドロップダウンに移動し、[UnusedMaterialsByWorkingUnit_PreprocessQuery] を選択します。

PreprocessQuery を次のようにします。

partial void UnusedMaterialsByWorkingUnit_PreprocessQuery(int? WorkingUnitID, ref IQueryable<Material> query)

{
    query = from material in query
            where !material.MaterialWorkingUnitMaps.Any(c => c.WorkingUnit.Id == WorkingUnitID)
            select material;
}

ドロップダウンがある LIghtswitch 画面に移動します。Add Data Item... を選択し、UnusedMaterialsByWorkingUnit クエリを選択します。画面の左側で、クエリにある WorkingUnitID をクリックし、画面に読み込まれた WorkingUnit.ID にデータバインドします。ドロップダウンに移動し、UnusedMaterialsByWorkingUnit コレクションをソースとして選択します。

これがうまくいくかどうか教えてください!

于 2013-09-07T11:08:55.647 に答える
0

選択したマテリアル アイテムを MaterialWorkingUnitMap に追加するコマンドで、選択したレコードを Material コレクションから削除するコードを追加します。Lightswitch のデータ バインディングを使用すると、Material レコードがビューからすぐに目に見えて削除されます。ただし、SaveChanges を呼び出すと、データベースからこれらのマテリアル レコードが削除されますが、これは望ましくないと思います。それを防ぐために、SaveChanges パイプラインで、削除された Material レコードに対して DiscardChanges を呼び出すことができます。

于 2013-01-08T19:35:13.323 に答える