我需要将文本文件读入ListView。我已经将它保存到文件中了,但似乎没有人能够很好地回读文件。当文件读入时;所有数据都在第一列中,而不是显示在相应的标题下。
以下是我保存到文件中的文本文件数据:
05 / 23 / 2017
10 : 44
13 : 44
3
$48.00
05 / 23 / 2017
09 : 15
15 : 15
6
$96.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列中收到的工时数。
我怎样才能做到这一点?提前谢谢。
答案 0 :(得分:2)
首先,您应该在列表视图中添加列,并确保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行,并将这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;
}
}
<强>输出强>