如何禁用网格中的元素

Jos*_*nge 10 javascript c# sql datagrid store

我有多个网格显示基于给定过滤器的数据(在使用REST Api的Web应用程序中).显示的数据结构始终相同(以简化问题),但根据用户所在的屏幕,显示的结果不同.

此外,这是问题,必须禁用某些结果,以便用户无法选择它们.

示例:Foo有N条.如果我想向父亲(foo)添加一个新的子(bar),我会进入搜索屏幕,但我希望过滤后的网格显示为已经与父亲相关的残疾儿童.

目前我通过根据场景和"禁用"我不想要的结果执行特定连接来控制服务器上的此问题(数据库查询).但是这种方法导致我无法重用查询(由于特定的连接.也许我需要搜索Bars int order将它们与其他父亲Baz联系起来,我想要禁用已经与当前父亲相关的条...)

另一种方法可能如下:

  • 在内存中的数组中保存与父亲相关的子(仅ID)(javascript)
  • 在"prerender"网格事件(或类似)中检查每个元素是否包含在前一个数组中(按id搜索).如果是,请将其标记为已禁用(例如).这是客户端的可重用解决方案,我总是可以在服务器端重用相同的查询.

在开始实施此解决方案之前,我想知道是否有更好的选择.我确信这是一个反复出现的问题,我不想重新发明轮子.

任何策略或建议?

编辑:显示示例:

假设这个模型:

Category N:M Item
SalesPromotion N:M Item
Run Code Online (Sandbox Code Playgroud)

我有两个不同的屏幕:一个显示项目属于一个类别,另一个显示项目属于一个促销.在每个屏幕中,我都可以搜索项目并将它们添加到Category或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
Run Code Online (Sandbox Code Playgroud)

你可以想象如果我有越来越多这样的场景会发生什么(当然有更复杂的模型和查询).

一种替代方案可能是:

  • 将已属于当前Category/SalesPromotion的项目存储在内存中(javascript,clientside).
  • 在客户端上的网格预渲染事件(或等效)确定必须禁用哪些项目(通过搜索存储项目中的每一行).

所以,我的问题是这种方法是一个很好的解决方案,还是有一个众所周知的解决方案(我想是这样).

Mig*_*tee 6

我根据op的评论改变了我的答案

所以你基本上有两个选择.

  1. 查询数据库后删除ID服务器端.(影响响应性能但更安全).
  2. 使用js在客户端执行此操作并将其从网格中删除.