如何从LightSwitch中的下拉控件中过滤掉已选择的项目?

时间:2012-11-27 13:14:48

标签: drop-down-menu visual-studio-lightswitch

我想要实现的目标如下: 我有一个下拉列表,其中包含数据库中的一些值。我有一些材料,我与WorkingUnits相关联。所以我能够为WorkingUnit分配尽可能多的材料,并且将一个和相同的材料分配给两个不同的WorkingUnit(如果我想这样做的话)。到目前为止一切都那么好,但我希望得到的是额外的,就是过滤掉每个工作单位已经选择的材料,以便用户不能再次选择它们。

即兴表关系:

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

我可能会要求一些微不足道的东西,但到目前为止我无法弄清楚这一点。根据描述的行为,您的关系是否错误?据他说,他们是有道理的,但我对LightSwitch完全不熟悉。

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

2 个答案:

答案 0 :(得分:2)

我希望这会有所帮助。

转到Materials表并创建一个名为“UnusedMaterialsByWorkingUnit”的新查询 在此查询中,添加1个参数:Integer类型的参数WorkingUnitID。 转到Write Code下拉列表并选择“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集合作为源。

让我知道这是否有效!

答案 1 :(得分:0)

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