You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 16:31:19