如何将多个列表框值保存到单个文本文件C#中

时间:2015-04-06 11:36:47

标签: c# list foreach listbox text-files

我现在拥有的是两个列表框,它们是lstItem和lstQty,我想将这两个值保存到单个文本文件中。

lstItem   |   lstQty
Chicken   |     3
Fish      |     2
Lamb      |     1

我希望将此值保存到文本文件中,如下所示:

Chicken | 3
Fish | 2
Lamb | 1

而不是:

Chicken
Fish
Lamb
3
2
1

这些是我的代码:

string receiptFile = @"D:\VisualStudio2012\SalesDetails.txt";

StreamWriter file2 = new StreamWriter(receiptFile, true);

List<string> totalSales = new List<string>();
foreach (object item in lboItem.Items)
{
   totalSales.Add(item as string);
   file2.WriteLine(item);
}
foreach (object item2 in lboQty.Items)
{
   totalSales.Add(item2 as string);
   file2.WriteLine(item2);
}
file2.Close();

我知道为什么它在文本文件中显示就像我上面提到的那样。它发生的原因是我不知道如何让它像我想要的那样。提前感谢任何可以解决此问题的人。

2 个答案:

答案 0 :(得分:1)

好吧,你不需要两个循环,而只需要一个循环,在这一个循环中你只需要连接两个列表框中的值并将它们写入文件。

这样的事情:

int itemsCount = Math.Min(lboItem.Items.Count, lboQty.Items.Count);
for (int i = 0; i < itemsCount; i++)
{
    string item = "";
    if (i < lboItem.Items.Count)
        item = lboItem.Items[i].ToString();

    item += " | ";

    if (i < lboQty.Items.Count)
        item += lboQty.Items[i].ToString();

    totalSales.Add(item);
    file2.WriteLine(item);
}

我不确定你为什么需要totalSales列表 - 但这取决于你的逻辑。

另请注意 - 此处列出了列表框大小不相等的情况。如果您的列表框大小保证相同 - 此检查是多余的,您可以将此代码段简化为

int itemsCount = lboItem.Items.Count;
for (int i = 0; i < itemsCount; i++)
{
    string item = string.Format("{0} | {1}", lboItem.Items[i], lboQty.Items[i]);
    totalSales.Add(item);
    file2.WriteLine(item);
}

答案 1 :(得分:1)

如果两个列表框始终具有相同数量的项目,这可能会对您有所帮助:

string receiptFile = @"D:\VisualStudio2012\SalesDetails.txt";
StreamWriter file2 = new StreamWriter(receiptFile, true);
for(int i=0; i < lboItem.Items.Count; i++)
{
  file2.WriteLine(string.Format("{0} | {1}", lboItem.Items[i].ToString(), lboQty.Items[i].ToString()));
}
file2.Close();

我没有意识到totalSales的目的。如果需要,可以在for循环中添加它。