C# 使用c删除项目时自动计算listview中项目的总值#

C# 使用c删除项目时自动计算listview中项目的总值#,c#,listview,C#,Listview,我正在使用listview作为购物车。我需要知道如何重新计算购物车的总价值时,我删除一个项目 这是我添加到listview的代码 private void btnACart_Click(object sender, EventArgs e) { int value = 0; for (int i = 0; i < lvCart.Items.Count; i++) { value += int.Parse(lvCart.Items[i].SubIte

我正在使用listview作为购物车。我需要知道如何重新计算购物车的总价值时,我删除一个项目

这是我添加到listview的代码

private void btnACart_Click(object sender, EventArgs e)
{
    int value = 0;

    for (int i = 0; i < lvCart.Items.Count; i++)
    {
        value += int.Parse(lvCart.Items[i].SubItems[1].Text);
    }

    rtbTcost.Text = value.ToString();
}

我想重新计算删除项目后项目的总值。我该怎么做?

您不能在foreach中更改相同的列表

foreach (ListViewItem item in lvCart.Items)
{
    if (lvCart.Items[0].Selected)
    {
        lvCart.Items.Remove(lvCart.SelectedItems[0]);
        total += Convert.ToInt32(item.SubItems[1].Text);
    }
}
解决方案是创建重复列表并对其进行更改:

var newList = lvCart;

foreach (ListViewItem item in lvCart.Items)
{
    if (lvCart.Items[0].Selected)
    {
        newList.Items.Remove(lvCart.SelectedItems[0]);
        total += Convert.ToInt32(item.SubItems[1].Text);
    }
}
像这样的

在表单级别上声明

private int _listTotal;
添加-我认为您在这里遇到了一些问题,因为您应该在添加项目时将其添加到总数中

private void btnACart_Click(object sender, EventArgs e)
{
    int value = 0;

    for (int i = 0; i < lvCart.Items.Count; i++)
    {
        value += int.Parse(lvCart.Items[i].SubItems[1].Text);
    }
    // how about lvCart.Items.Add(<myVal>)...???
    _listTotal += value; // and here add myVal
    rtbTcost.Text = _listTotal.ToString();
}

未测试,但应能正常工作

请您澄清您要求的总数。对我来说,在阅读问题时,它没有打开。我希望listview充当购物车。我想知道每件商品的总价。谢谢你的帮助,先生。不是很准确,但效果很好。对不起,先生,关于这个程序。您给我的代码中的问题是,每次我删除该项时,它删除的值都是添加到listview@T.S.@bluffer中的第一个值,我刚刚测试了它-它工作正常。我有
\u l.MultiSelect=true的列表视图。我添加了10个项目,选择了其中的3个,例如项目2、5、8。通过'while(_.SelectedItems.Count>0){u.Items.Remove(_.SelectedItems[0]);}'我看没有问题。在删除之前,您需要实际单击并选择该项目。再次感谢先生,哈哈哈。我尝试使用for循环并组合了您的代码。但是现在很好,非常感谢!!!!我警告过你-不要使用for循环来改变集合!!:o) )
private void btnRemoveItem_Click(object sender, EventArgs e)
{
    int total = 0;
    foreach (ListViewItem item in lvCart.Items)
    {
       if (lvCart.Items[0].Selected)
        {
            total+=(int)lvCart.SelectedItems[0].SubItems[1].Text;//Add to total while romving
           lvCart.Items.Remove(lvCart.SelectedItems[0]);
           //total += Convert.ToInt32(item.SubItems[1].Text);
        }
    }

      rtbTcost.Text = total.ToString();
   }
private void btnRemoveItem_Click(object sender, EventArgs e)
{
    int totalRemoved = 0;
    while (lvCart.SelectedItems.Count > 0)
    {
        totalRemoved += Convert.ToInt32(lvCart.SelectedItems[0].SubItems[1].Text);
        lvCart.Items.Remove(lvCart.SelectedItems[0]);
    } 
    _listTotal -= totalRemoved;
    rtbTcost.Text = _listTotal.ToString

}
private void btnRemoveItem_Click(object sender, EventArgs e)
{
    int total = 0;
    foreach (ListViewItem item in lvCart.Items)
    {
       if (lvCart.Items[0].Selected)
        {
            total+=(int)lvCart.SelectedItems[0].SubItems[1].Text;//Add to total while romving
           lvCart.Items.Remove(lvCart.SelectedItems[0]);
           //total += Convert.ToInt32(item.SubItems[1].Text);
        }
    }

      rtbTcost.Text = total.ToString();
   }