c# - 如何根据从 SQL Server 获取的 ID 设置 ComboBox 初始 DisplayMember 以显示正确的项目
问题描述
我编写了一个从 SQL Server 获取所有数据的 Windows 窗体应用程序。
第一个表格显示DataGridView
带有Receipts
,每张收据都有其 ID 号、名称Status
,可以是Active
或Paid
。
ID | Name | Status
---+-----------+----------
1 | Receipt22 | Active
当从 中选择收据DataGridView
并单击“编辑”按钮时,它将提示第二种形式,其中显示该收据的所有项目/产品。
现在,我的问题是,我成功地用 Products 表中的所有项目填充了 ComboBox,但我需要做什么。是将一行的初始DisplayMember设置为已选择的Item的初始DisplayMember。
因此,例如,如果“Receipt1”有产品“1,2,2,3,4,1”,它应该在每一行中显示一个 ComboBox,其中初始值成员等于产品的 ID。
using (SqlConnection sqlCon = new SqlConnection(ConnectionStringHelper.ConString("Name")))
{
SqlDataAdapter sdr = new SqlDataAdapter("Select * from Products", sqlCon);
DataTable dt = new DataTable();
sdr.Fill(dt);
txtComboProducts.ValueMember = "ProductsID";
txtComboProducts.DisplayMember = "ProductName";
txtComboProducts.DataSource = dt;
}
这就是我填充 ComboBox 本身的方式,但我不知道如何根据与收据对应的项目显示和添加一行。
所以,在这种情况下,项目将是“1,2,2,3,4,1”,假设 1 = 水,2 = 果汁,3 = 糖果,4 = 蛋糕
Products(this is the comboBox) | Quantity |
-------------------------------+----------+
Water 2
Juice 1
Juice 2
Candy 5
Cake 1
Water 4
现在,如果我想更改第 1 行,我可以选择组合框并将其更改为列表中的其他产品。
主要问题是,我不知道如何设置初始 DisplayMember 以及如何为每个项目添加新行。
有没有人有任何想法或建议?将不胜感激。
解决方案
DisplayMember
是要显示的字段的名称,并且将始终保持不变(例如产品名称)。
您至少需要三个表。将产品分配给收据的一个Receipts
表、一个Products
表和一个连接表。让我们称之为ReceiptProducts
。
然后要填充组合框,您必须执行如下查询
SELECT rp.ProductsID, p.ProductName
FROM
ReceiptProducts rp
INNER JOIN Products p
ON rp.ProductsID = p.ProductsID
WHERE
rp.ReceiptsID = 7 -- Assuming that this is the id of your current receipt
ORDER BY
rp.Sorting
表:
- 收据(PK ReceiptsID、ReceiptName、描述等)
- 产品(PK ProductsID、ProductName)
- ReceiptProducts(PK ReceiptProductsID、FK ReceiptsID、FK ProductsID、数量、单位、排序)
如果要在组合框中为每个数据网格行显示不同的项(这与 无关),请在DataGridView.RowEnter 事件DisplayMember
中加载组合框项。
推荐阅读
- javascript - Vuejs 搜索栏过滤器不返回结果
- php - PHP: convert date time variable into date
- c# - 使用 SSIS 中的 Selenium 执行 c# 控制台应用程序
- java - 用Jsteg方法替换DCT中的LSB后如何保存jpeg图像?
- angular - MEAN (SPA) 简单授权
- merge - combineLatest 组合或合并 Observables 的替代方法
- spring - 为 Spring Web 客户端添加异常处理程序
- amazon-web-services - 添加的 SSL 不适用于使用 ACM 的 AWS 负载均衡器
- android - RTL 无法正常工作
- php - 无法将查询附加到以 /?user 结尾的 url