我有一个名为CaseNotes的winform数据输入和检索程序。这有一个填写的表单。在表单上有多个下拉列表,复选框控件,我数据绑定到tblCNMaintItem。该表的结构是 - >
ItemID | CategoryID | ItemDescription | OrderID | IsActive
有一个单独的Category表提供了categoryID。 CategoryID映射到案例备注表单上的单个控件。
我的问题是双重的:
我应该如何获得每件商品的价值? 在中,我通过CategoryID获取itemDescription来填充控件,但是在SaveNewCaseNote()上我需要获取相应的ItemID。我怎么能做到这一点?我应该为每个类别(控制)创建一个dictonary吗?我应该枚举ItemID / ItemDescription组合吗?
编辑 忘记#2,因为我找到了答案。
谢谢!
好吧,出于某种原因,我未能清楚说明这一点,并且产生了混乱。我的数据库由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)
也许......
这有帮助吗?
感谢大家的时间和精力!
答案 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);