1

我想要实现的是以下内容:我有一个下拉列表,其中包含数据库中的一些值。我有一些与 WorkingUnits 相关联的材料。因此,我可以为一个 WorkingUnit 分配尽可能多的材质,也可以将一个相同的材质分配给两个不同的 WorkingUnit(如果我想这样做的话)。到目前为止一切都很好,但我想要额外实现的是过滤掉每个工作单元已经选择的材料,以便用户无法再次选择它们。

临时表关系:

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

我可能会要求一些微不足道的事情,但到目前为止我无法弄清楚。根据所描述的行为,您的关系是否错误?在我看来,它们是有道理的,但我对 LightSwitch 完全陌生。

另一种解决方案是还包括一些验证,以防用户选择一个相同的材料。这是不太理想的方法,但我想它也让我满意。

4

2 回答 2

2

我希望这有帮助。

转到您的材料表并创建一个名为“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 屏幕。添加数据项...并选择 UnusedMaterialsByWorkingUnit 查询。在屏幕左侧,单击查询中的 WorkingUnitID 并将其数据绑定到屏幕上加载的 WorkingUnit.ID。转到您的下拉列表并选择 UnusedMaterialsByWorkingUnit 集合作为源。

让我知道这个是否奏效!

于 2013-09-07T11:08:55.647 回答
0

在将选定材料项添加到 MaterialWorkingUnitMap 的命令中,添加一些代码以从材料集合中删除选定的记录。使用 Lightswitch 的数据绑定,应该会立即从视图中移除 Material 记录。但是,当您调用 SaveChanges 时,这将导致从数据库中删除这些材料记录,我认为您不会这样做。因此,为了防止这种情况,在 SaveChanges 管道中,您可以对已删除的 Material 记录调用 DiscardChanges。

于 2013-01-08T19:35:13.323 回答