如何将多个列表框值保存到单个文本文件 C#
How to save multiple listbox value into single textfile C#
我现在有两个列表框,它们是 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();
我知道为什么它会像我上面提到的那样显示在文本文件中。它发生是因为我不知道如何让它像我想要的那样。预先感谢任何可以解决此问题的人。
好吧,你只需要一个循环而不是你的两个循环,在这个循环中你只需要连接两个列表框的值并将它们写入文件。
像这样:
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);
}
如果两个列表框总是有相同数量的项目,也许这对你有帮助:
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循环中添加它。
我现在有两个列表框,它们是 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();
我知道为什么它会像我上面提到的那样显示在文本文件中。它发生是因为我不知道如何让它像我想要的那样。预先感谢任何可以解决此问题的人。
好吧,你只需要一个循环而不是你的两个循环,在这个循环中你只需要连接两个列表框的值并将它们写入文件。
像这样:
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);
}
如果两个列表框总是有相同数量的项目,也许这对你有帮助:
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循环中添加它。