C# 显示已解析的csv文件

C# 显示已解析的csv文件,c#,visual-studio,csv,C#,Visual Studio,Csv,我已经在这方面工作了好几个小时,似乎不知道如何在表格中正确显示数据 使用(TextFieldParser csvParser=newtextfieldparser(path)){ csvParser.CommentTokens=新字符串[]{“#”}; SetDelimiters(新字符串[]{“,”}); csvParser.HasFieldsEnclosedInQuotes=true; csvParser.ReadLine(); int pointX=30; int pointY=40; 而

我已经在这方面工作了好几个小时,似乎不知道如何在表格中正确显示数据

使用(TextFieldParser csvParser=newtextfieldparser(path)){
csvParser.CommentTokens=新字符串[]{“#”};
SetDelimiters(新字符串[]{“,”});
csvParser.HasFieldsEnclosedInQuotes=true;
csvParser.ReadLine();
int pointX=30;
int pointY=40;
而(!csvParser.EndOfData){
string[]fields=csvParser.ReadFields();
int rowNums=fields.Length;
int指数=0;
对于(索引=0;索引
到目前为止,我正在抓取一个存储在
路径
变量中的csv文件,并读取该文件。可以通过
字段[]
访问输出。这很好,然后我尝试创建文本框,根据行将数据放入其中,但我当前拥有的结果如下所示

我想按顺序正确显示列名和行,这里是一个示例图像,它在记事本中的外观

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


另外请注意,此程序将打开的并非所有csv文件都很短,大多数文件都是数千行或更多行的大文件,因此无法简单地将
字段[0]
硬编码我认为控件重叠,因此您无法看到它们。问题在于它们像椅子一样重叠。您没有重置坐标

这里有一个改进:

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

                    csvParser.ReadLine();

int offsetX = 30;
int offsetY = 40;
int counter;

                    while (!csvParser.EndOfData) {
                    int pointerY = ++counter * offsetY; // first counter increments by one, then counter times offsetY occurs
                    int pointerX;

                        string[] fields = csvParser.ReadFields();
                        int rowNums = fields.Length;

                        for(int index = 0; index < rowNums;index++) {
pointerX = (index + 1) * offsetX;

                            string name = fields[index];
                            TextBox n = new TextBox() { Text = name, Location = new Point(pointerX, pointerY) };
                            panel2.Controls.Add(n);
                            panel2.Show(); // should be unnecessary
                        }
                    }
                }
使用(TextFieldParser csvParser=newtextfieldparser(path)){
csvParser.CommentTokens=新字符串[]{“#”};
SetDelimiters(新字符串[]{“,”});
csvParser.HasFieldsEnclosedInQuotes=true;
csvParser.ReadLine();
int offsetX=30;
int offsetY=40;
整数计数器;
而(!csvParser.EndOfData){
int pointerY=++counter*offsetY;//第一个计数器递增1,然后计数器乘以offsetY
int pointerX;
string[]fields=csvParser.ReadFields();
int rowNums=fields.Length;
对于(int index=0;index
最好使用DataGridView以表格格式显示此类数据

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

下面是您可以使用的内容(我注释掉了您在CSV文件中跳过标题的地方,并使用该行获取要在datagrid中使用的列标题)

var dt=new DataTable();
var-lineNo=0;
使用(var csvParser=newtextfieldparser(path))
{
csvParser.CommentTokens=新字符串[]{“#”};
SetDelimiters(新字符串[]{“,”});
csvParser.HasFieldsEnclosedInQuotes=true;
//csvParser.ReadLine();
而(!csvParser.EndOfData)
{
var fields=csvParser.ReadFields();
var rowNums=fields.Length;
var row=dt.NewRow();
lineNo+=1;
int指数=0;
对于(索引=0;索引我会考虑切换到GRIDVIEW,因为创建大量的控件会大大降低用户界面,当我们谈论具有数千行或更多的大文件时。看起来更好,但仍然不太正确。你能提供一个使用GridView的例子吗?我编辑了我的代码。请参见“编辑”下的“我已更改的内容”。您必须查找文本框的宽度。你可以创建一个“模板”。此索引属于此宽度的文本框。但是在使用DataGridView时,您不必定位单元格。至少您只需设置列的宽度。请访问此页面。C#DataGridView添加列和行的链接提供了添加列和行的示例到循环的
之后。您只希望随着外部(
while
)循环的每次迭代增加
pointY
       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;