Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C将CSV文件导入列表#_C#_List_Class_Datagridview - Fatal编程技术网

C# 使用C将CSV文件导入列表#

C# 使用C将CSV文件导入列表#,c#,list,class,datagridview,C#,List,Class,Datagridview,我正在使用C#将CSV文件导入我的应用程序 目前我有一个1字段的CSV文件。它工作得很好,但现在我想在同一个应用程序中添加一个3字段的CSV文件 一旦数据存储到列表中,我就将其绑定到我的DataGridView 这是我写的相关代码。如果您看到任何不属于我的问题但可能是问题的问题,请随时大声说出。我一直在学习和改进我的代码 BindingList<StringValue> data = new BindingList<StringValue>(); pri

我正在使用C#将CSV文件导入我的应用程序

目前我有一个1字段的CSV文件。它工作得很好,但现在我想在同一个应用程序中添加一个3字段的CSV文件

一旦数据存储到列表中,我就将其绑定到我的DataGridView

这是我写的相关代码。如果您看到任何不属于我的问题但可能是问题的问题,请随时大声说出。我一直在学习和改进我的代码

    BindingList<StringValue> data = new BindingList<StringValue>();

    private void importExcelFile()
    {
        TextFieldParser parser = new TextFieldParser(fileName);            
        parser.TextFieldType = FieldType.Delimited;
        parser.SetDelimiters(",");
        while (!parser.EndOfData)
        {
            //Processing row
            string[] fields = parser.ReadFields();
            foreach (string field in fields)
            {
                StringValue s = new StringValue(field);
                // Issue is here. It adds it to a single dimension array. What can I do to make it multi-dimension?
                data.Add(s);
            }
        }
        parser.Close();
    }

    private void OnBackgroundWorkerDoWork(object sender, DoWorkEventArgs e)
    {            
        importExcelFile();            
    }

    private void OnBackgroundWorkerRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        dataGridView1.DataSource = data;
        dataGridView1.Columns[1].Name = "URL";
        dataGridView1.Columns[1].HeaderText = "URL";
        dataGridView1.Columns[1].Width = 300;
        dataGridView1.Columns[1].ReadOnly = true;
        dataGridView1.AutoResizeColumns();            
        toolStripStatusLabel1.Text = dataGridView1.RowCount.ToString() + " Number Of Websites";
    }
我想我应该修改我的StringValue类来保存从CSV文件导入的多个字段。我不确定如何修改值部分,以便在将其绑定到dataGridView时返回所需的数据


感谢您的输入和帮助/

为什么不将csv放入这样的数据表中呢

private DataTable GetDataTableFromCsv(string path)
    {
        DataTable dataTable = new DataTable();
        String[] csv = File.ReadAllLines(path);

        foreach (string csvrow in csv)
        {
            var fields = csvrow.Split(','); // csv delimiter
            var row = dataTable.NewRow();

            row.ItemArray = fields;
            dataTable.Rows.Add(row);
        }

        return dataTable;
    }
之后,只需将datatable导入datagridview。

在实体(StringValue)中,您可以添加任意数量的属性,包含任意数量的值

通过将列DataPropertyName设置为要绑定的属性的名称,可以绑定dataGridView的每一列

例如,实体有两个属性:

class MyValues
{
    public string FirstName {get;set;}
    public string LastName {get;set;}
}
将此集合添加到your数据集合,并将其绑定到网格

您的网格可以配置为:

dataGridView1.Columns[0].Name = "FirstName";
dataGridView1.Columns[0].HeaderText = "FirstName";
dataGridView1.Columns[0].DataPropertyName = "FirstName";
dataGridView1.Columns[1].Name = "LastName";
dataGridView1.Columns[1].HeaderText = "LastName";
dataGridView1.Columns[1].DataPropertyName = "LastName";

解析CSV时必须非常小心。假设没有引用的文本。如果他们有5,6,“这也是文本”,343.33。你的绳子也会被分开。不是你想要的。编写或使用自己的解析器。这是一个不错的。
dataGridView1.Columns[0].Name = "FirstName";
dataGridView1.Columns[0].HeaderText = "FirstName";
dataGridView1.Columns[0].DataPropertyName = "FirstName";
dataGridView1.Columns[1].Name = "LastName";
dataGridView1.Columns[1].HeaderText = "LastName";
dataGridView1.Columns[1].DataPropertyName = "LastName";