显示已解析的csv文件

时间:2017-08-29 00:56:12

标签: c# visual-studio csv

我已经在这工作了好几个小时,似乎无法弄清楚如何在表格中正确显示数据

using (TextFieldParser csvParser = new TextFieldParser(path)) {
                csvParser.CommentTokens = new string[] { "#" };
                csvParser.SetDelimiters(new string[] { "," });
                csvParser.HasFieldsEnclosedInQuotes = true;

                csvParser.ReadLine();

                int pointX = 30;
                int pointY = 40;

                while (!csvParser.EndOfData) {
                    string[] fields = csvParser.ReadFields();
                    int rowNums = fields.Length;

                    int index = 0;

                    for(index = 0; index < rowNums;index++) {
                        string Name = fields[index];
                        TextBox n = new TextBox();
                        n.Text = Name;
                        n.Location = new Point(pointX, pointY);
                        panel2.Controls.Add(n);
                        panel2.Show();

                        pointY += 20;
                        if(index != 0) {
                            pointX += 100;
                        }
                    }
                }
            }

到目前为止发生的事情是我抓住存储在path变量中的csv文件并读取它可以通过fields[]访问输出这样可以正常工作然后我尝试创建文本框以将数据放入基于行然而我现在出来的东西看起来像这样

Program Display

我想正确显示列名和行,这里是一个示例图像,它在记事本中的样子

Notepad Display

在记事本中,您会看到每个新行都是一行,每个,指示行中的新条目,我想在我的程序中以这种方式显示它但在文本框中

另请注意,并非所有此程序将打开的csv文件都是最短的,将是包含数千或更多行的大文件,因此无法简单地将fields[0]硬编码

2 个答案:

答案 0 :(得分:1)

使用DataGridView以表格格式显示此类数据会好得多。

从工具箱中将DataGridView控件添加到表单中。您需要构建一个将绑定到DataGridview的DataTable。

以下是您可以使用的内容(我在您的CSV文件中删除了标题的位置,并使用该行来获取要在数据网格中使用的列标题)

       var dt = new DataTable();
        var lineNo = 0;
        using (var csvParser = new TextFieldParser(path))
        {
            csvParser.CommentTokens = new string[] { "#" };
            csvParser.SetDelimiters(new string[] { "," });
            csvParser.HasFieldsEnclosedInQuotes = true;

            //csvParser.ReadLine();

            while (!csvParser.EndOfData)
            {
                var fields = csvParser.ReadFields();

                var rowNums = fields.Length;

                var row = dt.NewRow();

                lineNo += 1;

                int index = 0;

                for (index = 0; index < rowNums; index++)
                {


                    if (lineNo==1)
                    {
                        dt.Columns.Add(fields[index]);
                    }
                    else
                    {
                        row[index] = fields[index];
                    }

                }

                if (lineNo == 1) continue;

                dt.Rows.Add(row);
                dt.AcceptChanges();
            }

        }
        dataGridView1.DataSource = dt;

答案 1 :(得分:0)

我认为控件是重叠的,所以你看不到它们。他们像椅子一样重叠是问题所在。您没有重置坐标。

这是一项改进:

mediaRecorder.setVideoFrameRate(60);