Как добавить файл, очистить форму, загрузить файл и обновить список при нажатии кнопки? - PullRequest
0 голосов
/ 09 января 2020

У меня есть форма каталога, которая отображает содержимое файла CSV в виде списка при загрузке. Я создаю кнопку, которая отправляет три введенных пользователем текстовых поля в файл CSV, очищает текстовые поля формы и вид списка, затем загружает и отображает обновленный каталог в виде списка.

К сожалению, когда кнопка нажата, Вместо этого я получаю пустой список, хотя метод clearForm предшествует loadDirectory и displayDirectory. Когда я закомментирую функцию clearForm, мой просмотр списка содержит оригинальный список, за которым следует весь новый список, как и ожидалось.

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();
        }
    }

1 Ответ

1 голос
/ 09 января 2020

Вам необходимо очистить элементы списка, а не самого списка:

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