【问题标题】:Enum or Dict? Which would help me here?枚举还是字典?哪个会在这里帮助我?
【发布时间】:2009-04-24 11:29:36
【问题描述】:

我有一个名为 CaseNotes 的 winform 数据输入和检索程序。这有一个可以填写的表单。在表单上有多个下拉列表、复选框控件,我将它们数据绑定到 tblCNMaintItem。该表的结构是-->

物品ID |类别ID |物品描述 |订单号 |是活跃的

有一个单独的类别表提供该类别 ID。 CategoryID 映射到案例注释表单上的单个控件。

我的问题有两个:

  1. 我应该如何获取每个项目的价值? 如中,我通过 CategoryID 获取 itemDescription 以填充控件,但在 SaveNewCaseNote() 上,我需要获取相应的 ItemID。我怎样才能做到这一点?我应该为每个类别(控件)创建一个字典吗?我应该枚举 ItemID/ItemDescription 组合吗?

  2. 编辑忘记#2,因为我找到了答案。

谢谢!

编辑

好的,由于某种原因,我没有清楚地说明这一点,这引起了混乱。我的数据库由 3 个表组成。 tblCaseNotestblCNMaintCategorytblCNMaintItem。 CaseNotes 每行包含一个完整的“案例说明”。 Maint 表格用于填写 CaseNote 时的多项选择答案。示例:他们必须选择“联系位置”。选项“办公室”或“会员之家”。在 tblCNMaintCategory 中有这样的条目-->

CategoryID = 3,CatgoryName = 联系人位置,IsActive = True

tblCNMaintItem 中有 2 个这样的条目 -->

ItemID=51,CategoryID=2,ItemDescription=Office,OrderID=0,IsActive=True ItemID=52, CategoryID=2, ItemDescription=会员之家, OrderID=0, IsActive=True

tblCaseNote 中会有这样的条目 --> CaseNoteID=3243、PersonID=454676、AssocContactLocations=51,然后还有更多列遵循相同的模式

问题 1 是关于希望将 ItemID 存储在 AssocContactLocation 中而不是 ItemDescription 中。我在想一个

Dictionary <strng, int> cLocateItems(itemDescription,itemID)也许...

这有帮助吗?

感谢大家的时间和精力!

【问题讨论】:

    标签: .net winforms dynamic-data


    【解决方案1】:

    在您编辑之后,我认为您的意思是, "如何在保存数据时显示文本但仍使用数字 ID?"

    如果这是您的问题,那么您的字典想法会起作用。

    我已经很久没有做任何 CRUD 工作了,但我记得您可以将 ID 与文本一起存储在下拉框中。然后,当您进行更新时,您将使用 ID 而不是文本。此选项可能比您的字典想法更容易。

    如果我仍然误解了您的问题,我想其他人将不得不提供帮助。

    【讨论】:

    • 不,你理解正确。也许我只是把它复杂化了。我会试一试并回复我的努力。谢谢!
    【解决方案2】:

    第一部分看不懂,但是第二部分……

    最佳做法是根本不要将多个值存储在单个列中。

    相反,您创建对包含所有值的第二个表的一对多引用。

    【讨论】:

      【解决方案3】:

      CNMaintItem 的底层数据源是什么?如果它已经在 ADO.NET DataTable 中,那么解决方案很简单。绑定到列表控件时,将 DisplayMember 属性设置为“ItemDescription”,将 DisplayValue 设置为“ItemID”,例如:

      //dtItem is the DataTable
      ddlItem.DataSource = dtItem;
      ddlItem.DisplayMember = "ItemDescription";
      ddlItem.ValueMember = "ItemID";
      

      或者更好,对于强类型数据表:

      ddlItem.DataSource = dtItem;
      ddlItem.DisplayMember = dtItem.ItemDescriptionColumn.ColumnName;
      ddlItem.ValueMember = dtItem.ItemIDColumn.ColumnName;
      

      上面也可以是任何类型的对象集合。 如果您有 Dictionary,则需要将字典对象分配给 BindingSource 对象,然后将 BindingSource 对象分配给列表控件的 DataSource 属性:

      BindingSource bs = new BindingSource();
      bs.DataSource = dictItem;
      ddlItem.DataSource = bs;
      ddlItem.DisplayMember = "Value";
      ddlItem.ValueMember = "Key";
      

      在所有情况下,在保存时,ItemID 都可以通过 SelectedValue 获得:

      int IdToSave = Convert.ToInt32(ddlItem.SelectedValue);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-16
        • 1970-01-01
        • 2011-05-08
        • 1970-01-01
        • 2013-09-14
        • 1970-01-01
        相关资源
        最近更新 更多