另外,这是一个问题,一些结果必须被禁用,以便用户无法选择它们.
示例:A Foo有N个条.如果我想给父亲(foo)添加一个新的孩子(吧),我去搜索屏幕,但是我想要筛选的网格显示为与父亲相关的残疾儿童.
目前,我正在服务器(数据库查询)控制这个问题,通过根据场景进行具体的连接和“禁用”我不想要的结果.但是这种方法导致我无法重复使用查询(由于具体连接),也许我需要搜索Bars int命令将其与其他父亲Baz相关联,并且我想要禁用与当前父亲相关的Bars …)
另一种方法可能如下:
>将与父亲相关的孩子(只有ids)保存在内存中的数组(javascript)
>在“prerender”网格事件(或类似的)中,检查每个元素是否包含在前一个数组中(按id搜索).如果是这样,将其标记为禁用(例如).
这是客户端的一个可重用的解决方案,我可以随时在服务器端重用相同的查询.
在开始实施这个解决方案之前,我想知道是否有更好的选择.
我相信这是一个反复出现的问题,我不想重塑轮子.
任何策略或建议?
编辑:显示示例:
假设这个模型:
Category N:M Item SalesPromotion N:M Item
我有两个不同的屏幕:一个显示项目属于一个类别,另一个显示项目属于一个促销.在每个屏幕中,我可以搜索项目并将其添加到类别或SalesPromotion.但是当我正在搜索项目时,我希望属于Category / SalesPromotion的项目显示为禁用(在本示例中为简单起见).
我可以在服务器上执行此操作,执行以下查询:
-- Query for search Items in Category screen SELECT * FROM ITEMS i LEFT JOIN ItemsCategories ic on ic.ItemId = i.ItemId WHERE ic.CategoryId IS NULL OR ic.CategoryId <> @CurrentCategoryId -- Query for search Items in SalesPromotion screen SELECT * FROM ITEMS i LEFT JOIN ItemsSalesPromotions isp on isp.ItemId= i.ItemId WHERE isp.PromotionId IS NULL OR isp.PromotionId <> @CurrentPromotionId
你可以想象如果我有越来越多的这样的场景(当然更复杂的模型和查询)会发生什么.
一个选择可能是:
>存储内存中已经属于当前类别/ SalesPromotion的项目(javascript,客户端).
>在客户端的网格预渲染事件(或等效)中,确定必须禁用哪些项目(通过搜索存储项目中的每一行).