【问题标题】:One row of list view is updating, but duplicate row is also inserted一行列表视图正在更新,但也插入了重复行
【发布时间】:2015-06-10 13:45:25
【问题描述】:

大家好,我正在尝试更新订购产品的数量。如果产品已经存在于用户的“购物篮”中而不是插入新行,则应更新包含现有项目的行中的数量。它正在更新,但也插入了一个新行,其中包含应该添加到原始行的数量,如下所示:

我猜我的代码在逻辑上有些问题,但是我没发现。

 private void btn_add_Click(object sender, EventArgs e)
    {
        try
        {
            ListViewItem item = new ListViewItem(list_Select_Product.SelectedItems[0].Text);
            item.SubItems.Add(list_Select_Product.SelectedItems[0].SubItems[1].Text);
            item.SubItems.Add(txt_quantity.Text);

            bool ok = true;
            if (!validNumbers(txt_quantity))
                ok = false;
            if (!validLength(txt_quantity, 1, 2))
                ok = false;

            if (ok == true)
            {
                foreach (ListViewItem lvi in list_view_orderitems.Items)
                {

                    if(lvi.SubItems[0].Text == list_Select_Product.SelectedItems[0].Text)
                    {
                        int UpdateQunat = Convert.ToInt32(lvi.SubItems[2].Text);
                        int AddMe = Convert.ToInt32(txt_quantity.Text);
                        UpdateQunat = UpdateQunat + AddMe;
                        lvi.SubItems[2].Text = Convert.ToString(UpdateQunat);
                        list_view_orderitems.Items.Add(item);

                    }
                    else if (lvi.SubItems[0].Text != list_Select_Product.SelectedItems[0].Text)
                    {
                        list_view_orderitems.Items.Add(item);

                    }
                }
                if(list_view_orderitems.Items.Count == 0)
                {
                    list_view_orderitems.Items.Add(item);


                }

            }


        }
        catch
        {

            MessageBox.Show("A product must be selected");
        }
    }

【问题讨论】:

    标签: c# windows forms list view


    【解决方案1】:

    仔细观察 foreach 循环。您实际上也将它添加到那里。 (所以你应该删除它)

    foreach (ListViewItem lvi in list_view_orderitems.Items)
    {
        if(lvi.SubItems[0].Text == list_Select_Product.SelectedItems[0].Text)
        {
            int UpdateQunat = Convert.ToInt32(lvi.SubItems[2].Text);
            int AddMe = Convert.ToInt32(txt_quantity.Text);
            UpdateQunat = UpdateQunat + AddMe;
            lvi.SubItems[2].Text = Convert.ToString(UpdateQunat);
            // adding it again. This line is not needed.
            list_view_orderitems.Items.Add(item);
         }
         else if (lvi.SubItems[0].Text != list_Select_Product.SelectedItems[0].Text)
         {
             list_view_orderitems.Items.Add(item);
         }
    }
    

    【讨论】:

    • 干杯,不敢相信我没有发现。谢谢!
    • 发生在我们最好的人身上!
    【解决方案2】:

    我这个那个if你需要摆脱这个项目。添加(我标记了它:

      if(lvi.SubItems[0].Text == list_Select_Product.SelectedItems[0].Text)
                        {
                            int UpdateQunat = Convert.ToInt32(lvi.SubItems[2].Text);
                            int AddMe = Convert.ToInt32(txt_quantity.Text);
                            UpdateQunat = UpdateQunat + AddMe;
                            lvi.SubItems[2].Text = Convert.ToString(UpdateQunat);
                          //  list_view_orderitems.Items.Add(item);
    
                        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 2017-10-07
      • 2020-04-22
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      相关资源
      最近更新 更多