【问题标题】:listview data write onto csv file and then reading data from csv and displaying on listviewlistview 数据写入 csv 文件,然后从 csv 读取数据并在 listview 上显示
【发布时间】:2013-10-20 18:03:01
【问题描述】:

我有一个表单应用程序,其中给出了多个文本框和列表视图...我想将列表视图数据显示到 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);
    }

请写简单易懂的代码

【问题讨论】:

  • not getting desire output 你能说得更具体点吗?
  • 对不起,我不明白。当您单击提交信息时,您将字符串保存在 csv 文件中,然后您想在 dataGridView 中查看所有 FirstName/LastName/Age?
  • 我希望 listview 列的值也可以在单击提交时写入 csv 文件...图像只是为了显示您的表单是这样的..否则我的代码有错误.. . 我需要你编写简单易懂的代码,这样我就可以很容易地理解 listview 数据如何存储到 csv 文件中......

标签: c# winforms listview csv export-to-csv


【解决方案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)这不是最好的解决方案,因为每次调用 update table 之前,它都会从列和行中清除表,然后用数据填充 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 中调用:此方法用 csv 文件中的数据填充您的 datagridview(dgv)。这种方法保存文件中的行

2)AddRow(string s)方法只需在dgv中添加一行

3)在LoadTable()中调用了ClearDataGridView()方法:从那一刻的行和列中清除datagridview

4)UpdateTable() 方法现在更好,因为只需添加之前没有的行。

【讨论】:

    猜你喜欢
    • 2018-02-21
    • 1970-01-01
    • 2021-12-05
    • 2021-03-13
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    相关资源
    最近更新 更多