2011-05-26 45 views
0

例如,假设我有3个可能的项目状态,使用什么技术将活动项目列表限制在列表中,除非需要为了历史目的而包含非活动项目?

  1. 打开
  2. 关闭
  3. 无效

让我们假设我已经创建了两个项目,一个用的状态“打开“,另一个状态为”无效“。然后,在路上的某个地方,状态“不活动”不再适当,因此它通过状态表中的某个“IsActive”标志取消激活。这会导致它不再显示在绑定到DropDownList或等效列表的状态列表中。

因此,现在当用户创建新的项目项目时,“添加新的”屏幕应该只显示两个活动状态,即打开和关闭。但是现在让我们假设他们正在编辑过去的项目,这些项目的状态可能不再活跃和可用。使用什么技术在列表中包含非活动状态,至少在使用活动状态重新保存之前? (虽然我可能会允许与旧的状态重新进行保存。)

我看到几个选项,不过话说从未解决了这个问题,我不知道之前,这将是最简单的维护:

  1. 始终从存储库中选择所有可能的状态,并在托管代码中过滤掉除当前在项目上设置的状态以外的非活动状态,并使用此列表进行绑定。
  2. 只从存储库中选择活动状态,并在托管代码中追加(合并)项目中的状态到列表中,并与此列表绑定。
  3. 将项目的标识符传递给检索状态的SQL,并使用它将项目的当前状态联合到活动状态列表中,并使用此列表进行绑定。

看起来好像实施起来相当简单,但就像我说的,我没有经历过这种情况。我有几个可以通过管理员可用的维护屏幕激活/取消激活的项目列表;有些将保持相当静态,但少数将会无限增长。选项2和3在列表变大时效率最高,但选项1似乎最容易实现。

我比较关心时间而不是表现这一点。我正在为一个ASP.NET应用程序,.NET 2.0,C#,用于UI的Web表单以及用于数据层的(I/My)Batis.NET,它与SQL Server数据库进行对话。

你会建议我做什么,StackOverflow的神?

+0

平底船。如果有“有效”记录,请不要让它们“停用”状态。 – 2011-05-26 01:57:25

+0

@Anthony:我已经想过了,但在某些时候,这些“项目”永远是“封闭的”,永远不会再被编辑。我与自己的辩论是,我是否应该重新使用UI的封闭项目,因为他们不需要再编辑。知道我在说什么? – 2011-05-26 02:06:41

回答

0

我通常使用以下方法:

  1. 检索状态值将带有可选的参数(或具有过载在.NET 2.0〜3.5),将指定是否取非活动状态的值或不该方法。因此,您可以选择仅提取活动状态或所有雕像 - 根据需要使用。

  2. 很多时候,所有状态都会被提取,因为屏幕将用于添加/编辑/查看目的。但是,添加/编辑/查看对话框是在客户端启动的,而不是任何后期支持。因此,状态下拉列表将显示所有状态值和非活动值,并使用某些CSS类进行修饰,以便它们以红色显示以指示处于非活动状态。在添加模式下,js代码(使用jquery)将隐藏非活动状态值。当然,在后端业务逻辑中有一些验证来检查状态码的有效性。

相关问题