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

C#中如何对比验证TextBox值与ListView单元格值(限制销售数量)

解决销售数量不超过可用库存的验证问题

核心思路

在添加/更新商品到ListView前,先完成两项关键校验:

  • 确保输入的可用数量和销售数量是有效正整数,避免转换异常
  • 针对「新增商品」和「更新已有商品」两种场景,分别检查销售数量(更新时需累加已有数量)是否超过可用库存

具体实现

1. 新增数字验证辅助方法

先写一个通用方法,用来判断输入是否为有效整数:

private bool IsValidNumber(string input, out int number)
{
    return int.TryParse(input, out number);
}

2. 修改原有业务逻辑,插入验证步骤

在原有的添加/更新逻辑前加入校验,不通过则提示用户并终止操作:

// 辅助方法:清空所有输入文本框
private void ClearInputBoxes()
{
    txtProductName.Text = "";
    txtProductID.Text = "";
    txtPrice.Text = "";
    txtAvailableQty.Text = "";
    txtSaleQty.Text = "";
    txtTotalAmount.Text = "";
    txtProduct.Text = "";
}

// 你的商品添加/更新主方法
private void ProcessProduct()
{
    // 第一步:验证可用数量和销售数量的合法性
    int availableQty, saleQty;
    if (!IsValidNumber(txtAvailableQty.Text, out availableQty) || availableQty <= 0)
    {
        MessageBox.Show("请输入有效的可用数量!");
        txtAvailableQty.Focus();
        return;
    }

    if (!IsValidNumber(txtSaleQty.Text, out saleQty) || saleQty <= 0)
    {
        MessageBox.Show("请输入有效的销售数量!");
        txtSaleQty.Focus();
        return;
    }

    // 第二步:检查是否为已有商品,处理更新逻辑
    bool productExists = false;
    for (int j = 0; j < ListView1.Items.Count; j++)
    {
        if (ListView1.Items[j].SubItems[1].Text == txtProductID.Text)
        {
            productExists = true;
            // 计算累计销售数量
            int existingSale = Convert.ToInt32(ListView1.Items[j].SubItems[4].Text);
            int totalSale = existingSale + saleQty;

            // 校验累计数量是否超过库存
            if (totalSale > availableQty)
            {
                MessageBox.Show($"该商品可用库存仅{availableQty},当前已售{existingSale},无法再添加{saleQty}!");
                txtSaleQty.Focus();
                return;
            }

            // 验证通过,执行更新
            ListView1.Items[j].SubItems[1].Text = txtProductID.Text;
            ListView1.Items[j].SubItems[2].Text = txtProductName.Text;
            ListView1.Items[j].SubItems[3].Text = txtPrice.Text;
            ListView1.Items[j].SubItems[4].Text = totalSale.ToString();
            ListView1.Items[j].SubItems[5].Text = (Convert.ToInt32(ListView1.Items[j].SubItems[5].Text) + Convert.ToInt32(txtTotalAmount.Text)).ToString();
            
            txtSubTotal.Text = subtot().ToString();
            Calculate();
            ClearInputBoxes();
            return;
        }
    }

    // 第三步:处理新增商品逻辑
    if (!productExists)
    {
        if (saleQty > availableQty)
        {
            MessageBox.Show($"该商品可用库存仅{availableQty},无法销售{saleQty}!");
            txtSaleQty.Focus();
            return;
        }

        ListViewItem lst = new ListViewItem();
        lst.SubItems.Add(txtProductID.Text);
        lst.SubItems.Add(txtProductName.Text);
        lst.SubItems.Add(txtPrice.Text);
        lst.SubItems.Add(txtSaleQty.Text);
        lst.SubItems.Add(txtTotalAmount.Text);
        ListView1.Items.Add(lst);
        
        txtSubTotal.Text = subtot().ToString();
        Calculate();
        ClearInputBoxes();
        return;
    }
}

关键优化点

  • 用int.TryParse替代Convert.ToInt32,避免无效输入导致的程序崩溃
  • 拆分清空文本框逻辑为独立方法,让代码更简洁易维护
  • 针对更新场景做累计数量校验,避免多次添加后超出库存
  • 验证不通过时直接定位到对应输入框,提升用户操作体验

内容的提问来源于stack exchange,提问作者user11085963

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:35:16