显示所有列表框项的总值

时间:2014-05-08 13:30:31

标签: c# wpf listboxitems

我想在文本框中显示所有列表框项的总值。

调试器显示值的格式如下:£00.00\r\n

基本上,我想分解项目字符串,然后将其转换为double(或十进制),将每个项目添加到一起,最后给出总和。

我尝试使用.Replace来替换£ \r\n,但这似乎只适用于第一个值,而不是其余值。

非常感谢有关如何解决此问题的任何帮助或建议。

(使用Visual Studio 2012,使用C#的WPF)

编辑 - 提供的代码清单:

private string trimmed;
private int total;

/// <summary>
/// Calculate the total price of all products
/// </summary>
public void calculateTotal()
{
    foreach (object str in listboxProductsPrice.Items)
    {
        trimmed = (str as string).Replace("£", string.Empty);
        trimmed = trimmed.Replace("\r\n", string.Empty);
        //attempt to break string down
    }

    for (int i = 0; i < listboxProductsPrice.Items.Count - 1; i++)
    {
        total += Convert.ToInt32(trimmed[i]);
    }
    //unsure about this for, is it necessary and should it be after the foreach?

    double add = (double)total;
    txtbxTotalPrice.Text = string.Format("{0:C}", add.ToString());
    //attempt to format string in the textbox to display in a currency format
}

当我尝试使用此代码时,£1.00£40.00的结果等于48。不太清楚为什么,但希望它能帮助那些拥有比我更多经验的人。

1 个答案:

答案 0 :(得分:1)

首先,您在每次迭代时完全替换trimmed的内容。我将循环更改为:

foreach (object str in listboxProductsPrice.Items)
{
    trimmed = (str as string).Replace("£", string.Empty);
    trimmed = trimmed.Replace("\r\n", string.Empty);
    total += Convert.ToInt32(trimmed);
}

当你这样做时

total += Convert.ToInt32(trimmed[i]);

因为trimmed是一个字符串,所发生的是你要添加字符串的i字符的值 - 如果有更多的行,这可能会导致程序崩溃列表框比trimmed中的字符要多。你可能得到48,因为那是字符“0”的整数值。