C#与SQL实现:ComboBox选项同步至ListBox及价格显示与累加
功能实现修正方案
需求明确
- 选择
TestidCb(ComboBox)中的项目后,点击确认按钮将该项目添加到ListBox中 - 同时在Cost文本框显示当前项目的价格,多选时自动累加总价
现有代码存在的问题
- 未将选中项目添加到ListBox,而是用字符串拼接存到文本框,不符合需求
Cost变量未定义,无法获取当前选中项目的对应价格- 多余判断
LabidCb的选中状态,需求未提及该强制要求 - 缺少ComboBox选中状态重置逻辑,易导致重复添加
修正后的完整代码实现
1. ComboBox初始化(保留原逻辑,补充ListBox初始化)
public void fill_listbox() { SqlDataAdapter da = new SqlDataAdapter("select TestCost,TestName from TestTbl", con); DataSet dt = new DataSet(); da.Fill(dt, "TestName"); TestidCb.DataSource = dt.Tables["TestName"]; TestidCb.DisplayMember = "TestName"; TestidCb.ValueMember = "TestCost"; TestidCb.Text = "Select NorTest"; // 初始化ListBox,清空已有项 TestListBox.Items.Clear(); }
2. 确认按钮点击事件修正
// 用decimal存储总价,避免价格精度丢失 decimal totalCost = 0; private void OkBtn_Click(object sender, EventArgs e) { // 判断ComboBox是否选中有效项 if (TestidCb.SelectedIndex == -1) { MessageBox.Show("请选择检测项目"); return; } // 获取当前选中项目的名称和对应价格 string selectedTestName = TestidCb.Text; decimal currentCost = Convert.ToDecimal(TestidCb.SelectedValue); // 将项目添加到ListBox TestListBox.Items.Add(selectedTestName); // 累加总价并格式化显示(保留两位小数) totalCost += currentCost; CostTb.Text = totalCost.ToString("N2"); // 重置ComboBox选中状态,避免重复添加 TestidCb.SelectedIndex = -1; TestidCb.Text = "Select NorTest"; }
关键改进点
- 改用
decimal类型处理价格,避免整数类型导致的精度丢失问题 - 直接将选中项添加到ListBox,完全匹配需求要求
- 通过
SelectedValue直接获取对应价格,无需额外定义变量 - 添加ComboBox选中状态重置逻辑,提升操作体验
- 移除无关的
LabidCb判断,聚焦核心需求
内容的提问来源于stack exchange,提问作者zack
相关产品推荐
相关产品推荐

