данные списка записываются в файл csv, а затем считываются данные из csv и отображаются в списке

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

private void btnUserInformation_Click(object sender, EventArgs e)
    {
        ListView view=new ListView();
        string filepath=@"E:\Visual Studio Project\UserInfoTestApp\UserInfoTestApp\UserInfo.csv";
        InformationInsertion();
        ClearFields();
        ListViewtoCSV(view, filepath);

    }

    public void ListViewtoCSV(ListView lv,string path)
    {
        string Info ="";
        for (int i = 0; i < lv.Items.Count; i++)
        {
            for (int j = 1; j < lv.Items.Count; j++)
            {
                Info += lvUserInformation.Items[i].SubItems[j].Text + ",";
            }
            Info = Info.TrimEnd(',');
        }           

        if (!File.Exists(path))
        {
            File.WriteAllText(path, Info);
        }
        File.AppendAllText(path, Info);
    }

пожалуйста, напишите простой код, который можно легко понять

введите здесь описание изображения


person Abbasi    schedule 12.10.2013    source источник
comment
not getting desire output можно поконкретнее?   -  person King King    schedule 13.10.2013
comment
извини но я не понимаю. Когда вы нажимаете на информацию об отправке, вы сохраняете строки в файле csv, а затем хотите просмотреть все имя/фамилию/возраст в dataGridView?   -  person Tinwor    schedule 13.10.2013
comment
я хочу, чтобы значения столбцов списка были записаны в файл csv также, когда щелчок при отправке выполняется... изображение просто дано, чтобы показать, что форма у вас такая.... иначе мой код имеет ошибки... мне нужно, чтобы вы написали просто и понятный код, поэтому я могу легко понять, как хранить данные listview в файле csv....   -  person Abbasi    schedule 13.10.2013


Ответы (1)


Надеюсь, я понял, и я закодировал это:

  private void saveInCSVFILE()
    {
        if (txtName.Text != string.Empty && txtLastName.Text != string.Empty && txtAge.Text != string.Empty && txtAdress.Text != string.Empty && txtContactNumber.Text != string.Empty)
        {
            using (System.IO.StreamWriter sw = new System.IO.StreamWriter("filename.csv", true))
            { sw.WriteLine(string.Format("{0};{1};{2};{3};{4}", txtName.Text, txtLastName.Text, txtAge.Text, txtAdress.Text, txtContactNumber.Text)); }
            updateTable();
        }

    }
    private void updateTable()
    {
        dgv.Rows.Clear();
        dgv.Columns.Clear();
        using (System.IO.StreamReader sr = new System.IO.StreamReader("filename.csv"))
        {
            while (sr.Peek() > -1)
            {
                string setRow = string.Empty;
                string[] tmp = sr.ReadLine().Split(';');
                setRow = tmp[0] + ';' + tmp[1] + ';' + tmp[2];
                dgv.Rows.Add(setRow.Split(';'));
            }
        }
    }

1) Если вы хотите экспортировать этот проект, никогда не используйте относительный путь, но вы должны использовать абсолютный путь

2) Я использовал конструкцию using, поэтому файл автоматически закрывается после завершения цикла.

3) Это не лучшее решение, потому что каждый раз, когда вы вызываете таблицу обновления, прежде чем она очищает таблицу от столбца и строки и после заполнения dgv данными.

Редактировать:

Я думаю, что это лучшее решение:

  private void SaveInCSVFILE()
    {
        if (txtName.Text != string.Empty && txtLastName.Text != string.Empty && txtAge.Text != string.Empty && txtAdress.Text != string.Empty && txtContactNumber.Text != string.Empty)
        {
            using (System.IO.StreamWriter sw = new System.IO.StreamWriter("filename.csv", true))
            { sw.WriteLine(string.Format("{0};{1};{2};{3};{4}", txtName.Text, txtLastName.Text, txtAge.Text, txtAdress.Text, txtContactNumber.Text)); }
            UpdateTable();
        }

    }
    private void UpdateTable()
    {
        using (System.IO.StreamReader sr = new System.IO.StreamReader("filename.csv"))
        {
            int tmpCountRow = 0;
            while (sr.Peek() > -1)
            {
                tmpCountRow++;
                if (tmpCountRow > this.rowCountFile)
                {
                    AddRow(sr.ReadLine());
                    this.rowCountFile++;
                }
                else
                    sr.ReadLine();
            }
        }
    }
    private void ClearDataGridView()
    {
        dgv.Rows.Clear();
        dgv.Columns.Clear();
    }
    private void AddRow(string s)
    {
        string setRow = string.Empty;
        string[] tmp = s.Split(';');
        setRow = tmp[0] + ';' + tmp[1] + ';' + tmp[2];
        dgv.Rows.Add(setRow.Split(';'));
    }
    private void LoadTable()
    {
        ClearDataGridView();
        dgv.ColumnCount = 3;
        dgv.Columns[0].HeaderCell.Value = "First Name";
        dgv.Columns[1].HeaderCell.Value = "Last Name";
        dgv.Columns[2].HeaderCell.Value = "Age";
        using (System.IO.StreamReader sr=new System.IO.StreamReader("filename.csv"))
        {
            while (sr.Peek() > -1)
            {
                this.rowCountFile++;
                while (sr.Peek() > -1)
                {
                    AddRow(sr.ReadLine());
                }
            }
        }
    }

В этом втором решении я реализовал функцию LoadTable() AddRow(string s) ClearDataGrdView() и отредактировал UpdateTable()

1) Метод LoadTable() будет вызывать в form_load: этот метод заполняет ваш datagridview (dgv) данными, которые были в файле csv. И этот метод сохраняет строку, которая находится в файле

2)метод AddRow(string s) просто добавляет строку в dgv

3) метод ClearDataGridView() вызывается в LoadTable(): очищаем datagridview от строк и столбцов, которые есть в данный момент

4) метод UpdateTable() теперь лучше, потому что просто добавьте строки, которых раньше не было.

person Tinwor    schedule 12.10.2013