0

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

物品编号 | 类别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=Member's Home, OrderID=0, IsActive=True

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

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

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

这有帮助吗?

感谢大家的时间和精力!

4

3 回答 3

1

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

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

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

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

于 2009-04-24T13:53:01.557 回答
1

第一部分看不懂,第二部分

最佳实践是根本不在单个列中存储多个值。

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

于 2009-04-24T13:57:48.597 回答
0

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);
于 2009-04-25T02:01:39.153 回答