C# 如何在单击按钮时追加文件、清除表单、加载文件和更新listview?

C# 如何在单击按钮时追加文件、清除表单、加载文件和更新listview?,c#,arrays,winforms,listview,textbox,C#,Arrays,Winforms,Listview,Textbox,我有一个目录表单,它在加载时在listview中显示CSV文件的内容。我正在创建一个按钮,将三个用户输入的文本字段发送到CSV文件,清除表单文本框和listview,然后在listview中加载并显示更新的目录 不幸的是,当点击按钮时,我得到的却是一个空白的listview,即使clearForm方法出现在loadDirectory和displayDirectory之前。当我注释掉clearForm函数时,我的listview包含原始列表,后面是整个新列表,正如预期的那样 private voi

我有一个目录表单,它在加载时在listview中显示CSV文件的内容。我正在创建一个按钮,将三个用户输入的文本字段发送到CSV文件,清除表单文本框和listview,然后在listview中加载并显示更新的目录

不幸的是,当点击按钮时,我得到的却是一个空白的listview,即使clearForm方法出现在loadDirectory和displayDirectory之前。当我注释掉clearForm函数时,我的listview包含原始列表,后面是整个新列表,正如预期的那样

private void BtnAddNew_Click(object sender, EventArgs e)
    {
        addRecord(); // Sends text box entries to a file via. streamreader *working*
        clearForm(); // Clears the form *working on standalone clear button*
        loadDirectory(); // Loads CSV file contents to array *working*
        displayDirectory(); // Displays array to listview *working*
    }


public void loadDirectory()
    {
        StreamReader sr = new StreamReader(path);
        int lineCount = File.ReadLines(path).Count();

        string line;
        int count = -1;
        directoryTable = new record[lineCount];

        while (!sr.EndOfStream)
        {
            count++;
            line = sr.ReadLine();
            string[] fields = line.Split(',');

            record currentRecord = new record();
            currentRecord.surname = fields[0];
            currentRecord.forename = fields[1];
            currentRecord.extCode = Convert.ToInt32(fields[2]);
            directoryTable[count] = currentRecord;
        }
        sr.Close();
    }


public void displayDirectory()
    {
        for (int counter = 0; counter < directoryTable.Length; counter++)
        {
            ListViewItem lvi = new ListViewItem();
            lvi.Text = (Convert.ToString(directoryTable[counter].surname));
            lvi.SubItems.Add(Convert.ToString(directoryTable[counter].forename));
            lvi.SubItems.Add(Convert.ToString(directoryTable[counter].extCode));
            lvDirectory.Items.Add(lvi);
        }
    }


public void addRecord()
    {
        string[] newRecord = new string[3];

        newRecord[0] = txtForename.Text;
        newRecord[1] = txtSurname.Text;
        newRecord[2] = txtExtCode.Text;

        // Write newRecord array to last line of directory file
        StreamWriter sw = new StreamWriter(path, append: true);
        sw.WriteLine(newRecord[0] + ", " + newRecord[1] + ", " + newRecord[2]);
        sw.Close();
    }


public void clearForm()
    {
        foreach (Control field in Controls)
        {
            if (field is TextBox)
                ((TextBox)field).Clear();
            else if (field is ListView)
                ((ListView)field).Clear();
        }
    }
private void BtnAddNew_单击(对象发送者,事件参数e)
{
addRecord();//通过.streamreader*将文本框条目发送到文件*
clearForm();//清除窗体*使用独立的清除按钮*
loadDirectory();//将CSV文件内容加载到数组*中*
displayDirectory();//将数组显示到listview*工作*
}
公共void加载目录()
{
StreamReader sr=新的StreamReader(路径);
int lineCount=File.ReadLines(path.Count();
弦线;
整数计数=-1;
directoryTable=新记录[lineCount];
而(!sr.EndOfStream)
{
计数++;
line=sr.ReadLine();
string[]fields=line.Split(',');
record currentRecord=新记录();
currentRecord.姓氏=字段[0];
currentRecord.forename=字段[1];
currentRecord.extCode=Convert.ToInt32(字段[2]);
目录表[计数]=当前记录;
}
高级关闭();
}
公共void显示目录()
{
for(int counter=0;counter
您需要清除listview中的项目,而不是listview本身:

public void clearForm()
{
    foreach (Control field in Controls)
    {
        if (field is TextBox)
            ((TextBox)field).Clear();
        else if (field is ListView)
            ((ListView)field).Items.Clear();
    }
}

也许你必须删除空白字段,不仅清除它们,否则加载的新数据可能只是在许多银行字段之后,这就是为什么你看不到它们,ListVIEW自身出现空白。我的意思是,您可能正在将新数据添加到listview中的空白空行列表中。