Enum还是Dict?哪个会对我有帮助?

时间:2009-04-24 11:29:37

标签: .net winforms dynamic-data

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

ItemID | CategoryID | ItemDescription | OrderID | IsActive

有一个单独的Category表提供了categoryID。 CategoryID映射到案例备注表单上的单个控件。

我的问题是双重的:

  1. 我应该如何获得每件商品的价值? 在中,我通过CategoryID获取itemDescription来填充控件,但是在SaveNewCaseNote()上我需要获取相应的ItemID。我怎么能做到这一点?我应该为每个类别(控制)创建一个dictonary吗?我应该枚举ItemID / ItemDescription组合吗?

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

  3. 谢谢!

    修改

    好吧,出于某种原因,我未能清楚说明这一点,并且产生了混乱。我的数据库由3个表组成。 tblCaseNotes tblCNMaintCategory tblCNMaintItem 。 CaseNotes每行包含一个完整的“案例注释”。在填写CaseNote时,Maint表用于多选答案。示例:他们必须选择“联系人位置”。选项“办公室”或“会员的家”。在 tblCNMaintCategory 中有一个像这样的enntry - >

    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)也许......

    这有帮助吗?

    感谢大家的时间和精力!

3 个答案:

答案 0 :(得分:1)

编辑后,我想你的意思是, “我如何显示文本,但在保存数据时仍然使用数字ID?”

如果这是你的问题,那么你的字典想法是可行的。

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

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

答案 1 :(得分:1)

我不明白第一部分,但第二部分......

最佳做法是不要在一个列中存储多个值。

而是创建一个包含所有值的第二个表的一对多引用。

答案 2 :(得分:0)

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

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

或更好,对于强类型的DataTable:

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);