我正在使用WinForms
。在我的表单中,我有一个listview
和一个按钮。当我单击按钮时,程序会将listview
中的所有项目写入文本文件。问题是我希望第一列和第二列在一行中。
到目前为止,这是我用来写入文本文件的代码:
using (StreamWriter sw = File.CreateText(DirectoryPath))
{
foreach (ListViewItem item in listView1.Items)
{
sw.WriteLine(item.Text);
for (int i = 1; i < item.SubItems.Count; i++)
{
sw.WriteLine(item.SubItems[i].Text);
}
}
}
我的列表视图
问题输出文本文件
我希望如何显示文本文件
答案 0 :(得分:1)
你应该迭代列表视图项,将每个子项彼此连接起来,然后在最后将连接的字符串添加到文本文件中...我已经调整了你的代码:
using (StreamWriter sw = File.CreateText(DirectoryPath))
{
foreach (ListViewItem item in listView1.Items)
{
string strText = "";
//I'm not sure why you start at 1 and not 0, anyway:
for (int i = 1; i < item.SubItems.Count; i++)
{
strText+= " " + item.SubItems[i].Text;
}
sw.WriteLine(strText);
}
}
答案 1 :(得分:1)
如何
flex
答案 2 :(得分:1)
看来你的第一个单元&#34; FirstPage&#34;是父项,所有其他项是子项。假设你只有两列,那么答案就可以了。
using (StreamWriter sw = File.CreateText(DirectoryPath))
{
foreach (ListViewItem item in listView1.Items)
{
sw.Write(string.Format("{0} :",item.Text));
for (int i = 1; i < item.SubItems.Count; i++)
{
if (i % 2 == 0)
{
sw.Write(string.Format("{0} :",item.SubItems[i].Text));
}
else
{
sw.WriteLine(item.SubItems[i].Text);
}
}
}
}
替代方案是;将每个新行作为新项添加到列表视图
string[] row = { "FirstPage", "$1.00" };
string[] row2 = { "SecondPage", "$1.00" };
var listViewItem = new ListViewItem(row);
listView1.Items.Add(listViewItem);
var listViewItem2 = new ListViewItem(row2);
listView1.Items.Add(listViewItem2);
等等。您可以遍历foreach循环进行此添加,然后使用以下灵活的代码。
using (StreamWriter sw = File.CreateText(DirectoryPath))
{
foreach (ListViewItem item in listView1.Items)
{
sw.Write(string.Format("{0} :",item.Text));
for (int i = 1; i < item.SubItems.Count; i++)
{
sw.WriteLine(item.SubItems[i].Text);
}
}
}
答案 3 :(得分:1)
你可以用更优雅的方式做到:
var str = listView1.Items.Cast<ListViewItem>()
.Select(x => x.SubItems.Cast<ListViewItem.ListViewSubItem>())
.Select(x => string.Join(":", x.Select(s => s.Text)));
System.IO.File.WriteAllLines(@"d:\file.txt", str);
注意:如果您想限制列,例如只保存前两列,您可以通过以下方式选择第二行的子项:x.SubItems.Cast<ListViewItem.ListViewSubItem>().Take(2)