将文本文件中的整数列入listview

时间:2013-12-06 22:37:53

标签: c# winforms listview

我正在使用vs 2013在winforms c#中创建一个应用程序。

在应用程序中,我有一个文本文件,我正在使用时间选择下拉列表中的自定义格式来说明int格式的时间。

然后,我想在可选列表视图中显示该文本文件中的内容,我可以从文本文件中删除它。我几乎在那里,但是当我尝试将项目添加到列表框中时似乎添加,但他们没有正确显示。

例如,在我的文本文件中说

22102210
19101610
17182218
10272227

那就是它应该如何在listview中显示为可选择的准备删除。

目前它没有正确显示,它显示为1 .. 2 .. 1 ..

有人可以帮助我,并指出我为什么会发生这种情况的正确方向?任何帮助非常感谢。这是我的班级。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Chronos
{
    public partial class Interface : Form
    {
        private string[] getTimes = System.IO.File.ReadAllLines(@"G:\Dropbox\University\Chronos\Application\Chronos\Chronos\AdminAccount\Times.txt");
    public Interface()
    {
        InitializeComponent();
    }

    private void Interface_Load(object sender, EventArgs e)
    {
        PopulateList();
    }

    private void PopulateList()
    {
        int size = getTimes.Length;
        lstTime.Items.Clear();
        GetTimes();
        for (int i = 0; i < size; i++)
        {
            lstTime.Items.Add(getTimes[i]);
        }
    }

    private void GetTimes()
    {
        string[] getTimes = System.IO.File.ReadAllLines(@"G:\Dropbox\University\Chronos\Application\Chronos\Chronos\AdminAccount\Times.txt");
    }

    private void btnAdd_Click(object sender, EventArgs e)
    {
        string time = pickerTimeStart.Value.Hour.ToString() + pickerTimeStart.Value.Minute.ToString() + pickerTimeEnd.Value.Hour.ToString() + pickerTimeEnd.Value.Minute.ToString();

        System.IO.File.AppendAllText(@"G:\Dropbox\University\Chronos\Application\Chronos\Chronos\AdminAccount\Times.txt", time + Environment.NewLine);

        PopulateList();

        MessageBox.Show("Time added", "Ok");





        //PopulateList();
    }


}
}

1 个答案:

答案 0 :(得分:2)

按照目前的说法,GetTimes除了读取文件外什么都不做:

private void GetTimes()
{
    // "string[]" here overrides the outer scope
    string[] getTimes = System.IO.File.ReadAllLines(@"G:\Dropbox\University\Chronos\Application\Chronos\Chronos\AdminAccount\Times.txt");
}

如果你把它改成这个,它会变得更有用:

private string[] GetTimes()
{
    return File.ReadAllLines(@"G:\Dropbox\University\Chronos\Application\Chronos\Chronos\AdminAccount\Times.txt");
}

...然后PopulateList可以简单地成为:

lstTime.Items.Clear(); //so you aren't getting a bunch of dupes
lstTime.Items.AddRange(GetTimes().Select(t => new ListViewItem(t)).ToArray());

您也可以删除此行,因为您不需要在类中保留数据的副本:

private string[] getTimes = ...

注意:如果您决定将数据源保留在本地而不是仅针对该文件,则大部分内容都会发生变化。