C# Read/Import 一个文本文件变成一个ListView
C# Read/Import a text file into a ListView
我需要将文本文件读入 ListView。我已经把它保存到文件中了,但是似乎没有人对读回文件有好的答案。当文件读入时;所有数据都在第一列,而不是显示在适当的 headers.
下
这是我保存到文件中的文本文件数据:
05 / 23 / 2017
10 : 44
13 : 44
3
.00
05 / 23 / 2017
09 : 15
15 : 15
6
.00
这是我使用的代码:
private void ReadInTimeSheet()
{
foreach (string line in File.ReadAllLines(@"C:filepath\MyTimeSheet.txt"))
{
lvTimeSheet.Items.Add(new ListViewItem(line));
}
}
这是读入的结果:
Data displayed in ListView
如果您在打开文件时遇到问题;所有数据都包含在第一列中,看起来与我对上面文件中的文本的看法完全一样。
我需要的是第1栏显示的日期,第2栏开始时间,第3栏停止时间,第4栏工作总时数,第5栏显示工时工资。
我怎样才能做到这一点?提前谢谢你。
首先,您应该向列表视图中添加列,并确保 View
设置为 Details
。将列宽设置为 -2
将自动调整它们的大小:
private void Form1_Load(object sender, EventArgs e)
{
lvTimeSheet.View = View.Details;
lvTimeSheet.Columns.Add("Date");
lvTimeSheet.Columns.Add("Start Time");
lvTimeSheet.Columns.Add("Stop Time");
lvTimeSheet.Columns.Add("Total Hours");
lvTimeSheet.Columns.Add("Total Pay");
// Auto-size the columns
for (int i = 0; i < lvTimeSheet.Columns.Count; i++)
{
lvTimeSheet.Columns[i].Width = -2;
}
}
然后,当您读取文件时,您将需要读取 5 行,并将这五行添加为单个 ListViewItem
。请注意,ListViewItem
可以用数组初始化,因此我们将循环遍历您的文件行,一次五行,用这些行创建一个数组,然后添加一个新的 ListViewItem
填充通过该数组:
private void ReadInTimeSheet()
{
var fileLines = File.ReadAllLines(@"C:\filepath\MyTimeSheet.txt"))
for (int i = 0; i + 4 < fileLines.Length; i += 5)
{
lvTimeSheet.Items.Add(
new ListViewItem(new[]
{
fileLines[i],
fileLines[i + 1],
fileLines[i + 2],
fileLines[i + 3],
fileLines[i + 4]
}));
}
// Resize the columns
for (int i = 0; i < lvTimeSheet.Columns.Count; i++)
{
lvTimeSheet.Columns[i].Width = -2;
}
}
输出
我需要将文本文件读入 ListView。我已经把它保存到文件中了,但是似乎没有人对读回文件有好的答案。当文件读入时;所有数据都在第一列,而不是显示在适当的 headers.
下这是我保存到文件中的文本文件数据:
05 / 23 / 2017
10 : 44
13 : 44
3
.00
05 / 23 / 2017
09 : 15
15 : 15
6
.00
这是我使用的代码:
private void ReadInTimeSheet()
{
foreach (string line in File.ReadAllLines(@"C:filepath\MyTimeSheet.txt"))
{
lvTimeSheet.Items.Add(new ListViewItem(line));
}
}
这是读入的结果: Data displayed in ListView
如果您在打开文件时遇到问题;所有数据都包含在第一列中,看起来与我对上面文件中的文本的看法完全一样。
我需要的是第1栏显示的日期,第2栏开始时间,第3栏停止时间,第4栏工作总时数,第5栏显示工时工资。
我怎样才能做到这一点?提前谢谢你。
首先,您应该向列表视图中添加列,并确保 View
设置为 Details
。将列宽设置为 -2
将自动调整它们的大小:
private void Form1_Load(object sender, EventArgs e)
{
lvTimeSheet.View = View.Details;
lvTimeSheet.Columns.Add("Date");
lvTimeSheet.Columns.Add("Start Time");
lvTimeSheet.Columns.Add("Stop Time");
lvTimeSheet.Columns.Add("Total Hours");
lvTimeSheet.Columns.Add("Total Pay");
// Auto-size the columns
for (int i = 0; i < lvTimeSheet.Columns.Count; i++)
{
lvTimeSheet.Columns[i].Width = -2;
}
}
然后,当您读取文件时,您将需要读取 5 行,并将这五行添加为单个 ListViewItem
。请注意,ListViewItem
可以用数组初始化,因此我们将循环遍历您的文件行,一次五行,用这些行创建一个数组,然后添加一个新的 ListViewItem
填充通过该数组:
private void ReadInTimeSheet()
{
var fileLines = File.ReadAllLines(@"C:\filepath\MyTimeSheet.txt"))
for (int i = 0; i + 4 < fileLines.Length; i += 5)
{
lvTimeSheet.Items.Add(
new ListViewItem(new[]
{
fileLines[i],
fileLines[i + 1],
fileLines[i + 2],
fileLines[i + 3],
fileLines[i + 4]
}));
}
// Resize the columns
for (int i = 0; i < lvTimeSheet.Columns.Count; i++)
{
lvTimeSheet.Columns[i].Width = -2;
}
}
输出