gpt4 book ai didi

c# - 如何处理(国家)代码列表中的弃用值

转载 作者:行者123 更新时间:2023-11-30 20:05:02 27 4
gpt4 key购买 nike

假设我们有一个包含所有国家/地区代码的代码列表。国家代码是 Countries 表的主键,它在数据库中的许多地方用作外键。在我的应用程序中,国家通常显示为多个表单的下拉列表。

一些过去曾经存在的国家不再存在,例如Serbia and Montenegro , 其中有 SCG 的国家代码。

我有两个目标:

  • 不允许用户使用这些旧值(因此在插入数据时这些值不应在下拉列表中可见)
  • 用户应该仍然能够(只读)打开旧内容,在这种情况下,已弃用的值应该在下拉列表中可见。

我看到两个选项:

  • 重命名已弃用的值,例如从“CountryName”到“!!!!!CountryName”。这种方法最容易实现,但也有明显的缺点。
  • 将 IsActive 列添加到 Countries 表,并将所有已弃用的值设置为 false,将所有其他值设置为 true。在用户可以插入数据的所有表单上,只显示事件的值。在只读表单上,我们可以显示所有值(包括已弃用的值),以便用户能够显示旧数据。但是在我的某些表单上,用户还应该能够编辑数据,这意味着不推荐使用的值应该对他隐藏。这意味着,每个保管箱都应该有这样的初始化逻辑:如果显示的数据是只读的,则在保管箱中包含不推荐使用的值,如果数据也用于编辑,则将其排除。但这需要大量工作并且容易出错。

还有其他想法?

最佳答案

我经常处理这种情况,并使用“事件”标志来解决问题,正如您所描述的那样。当我用值填充下拉列表时,我只加载“事件”数据并包含最多 1 个弃用值,但前提是它正在使用。 (即,如果我正在查看一个人的记录,并且该人有一个已弃用的国家/地区,那么该国家/地区将与活跃国家/地区一起包含在下拉列表中。我在只读和编辑模式下执行此操作,因为在我的案例,如果一个人的记录(例如)列出了一个已弃用的国家/地区,他们可以继续使用它,但是一旦他们将其更改为未弃用的国家/地区,然后保存它,他们将永远无法切换回来(您的用例可能会有所不同)。

所以关键的区别是,即使在只读模式下,我也不会将所有已弃用的国家/地区添加到 DDL,只是将已弃用的国家/地区添加到我正在查看的记录中,即便如此,也只有当该记录已被使用。

这是我在加载下拉列表时使用的逻辑示例:

    protected void LoadSourceDropdownList(bool AddingNewRecord, int ExistingCode)
{
using (Entities db = new Entities())
{
if (AddingNewRecord) // when we are adding a new record, only show 'active' items in the drop-downlist.
ddlSource.DataSource = (from q in db.zLeadSources where (q.Active == true) select q);

else // for existing records, show all active items AND the current value.
ddlSource.DataSource = (from q in db.zLeadSources where ((q.Active == true) || (q.Code == ExistingCode)) select q);

ddlSource.DataValueField = "Code";
ddlSource.DataTextField = "Description";
ddlSource.DataBind();

ddlSource.Items.Insert(0, "--Select--");
ddlSource.Items[0].Value = "0";
}
}

关于c# - 如何处理(国家)代码列表中的弃用值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12056255/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com