首页 > 解决方案 > 按名称将列从 CSV 文件添加到 datagridview C#

问题描述

请告诉我如何从 csv 文件中按名称添加列数据?至少我在寻找一个链接,但我没有找到一个有效的代码。

我想找到“开始日期”列并将其添加到 datagridview。请帮我修复代码。 这是桌子的视图(见图)

在此处输入图像描述

期间编号 开始日期
第一的 01.07.2021
第二 01.07.2021
private void button6_Click(object sender, EventArgs e)
        {
            DataTable dtable = new DataTable();
            string[] lines = System.IO.File.ReadAllLines(openFileDialog1.FileName);
            if (lines.Length > 0)
            {
                //first line to create header
                string firstLine = lines[0];
                string[] headerLabels = firstLine.Split(',');
                foreach (string headerWord in headerLabels)
                {

                    if (headerWord== "Start Date")
                    {
                        dtable.Columns.Add(new DataColumn(headerWord));
                        for (int i = 1; i < lines.Length; i++)
                        {
                            string[] dataWords = lines[i].Split(',');
                            DataRow dr = dtable.NewRow();
                            int columnIndex = DataGrid2.ColumnCount;

                             dr["Start Date"] =dataWords[columnIndex];
                         dtable.Rows.Add(dr);
                        }
                    }  
                }
            }

            DataGrid2.DataSource = dtable;
        }

标签: c#csvimportdatagridview

解决方案


以下代码为 创建所有DataGrid2列,datatable然后检查是否存在名为 的列Start Date。如果没有,它会添加列,然后将DataGrid2行的每个元素移动到datatable,最后将数据表移到DataGrid2.

DataTable dtable = new DataTable();
string[] lines = System.IO.File.ReadAllLines(openFileDialog1.FileName);
if (lines.Length > 0)
{
    //first line to create header
    string firstLine = lines[0];
    string[] headerLabels = firstLine.Split(',');

    //all columns datadgrid2 push to datatable
    bool IsNotExistsColumnStartDate = true;
    for (int i = 0; i < DataGrid2.Columns.Count; i++)
    {
        string headerColumn = DataGrid2.Columns[i].HeaderText;
        if (headerColumn == "Start Date")
           IsNotExistsColumnStartDate = false;
        dtable.Columns.Add(new DataColumn(headerColumn));
    }

    //add column Start Date
    if (IsNotExistsColumnStartDate)
        dtable.Columns.Add(new DataColumn("Start Date"));

    foreach (string headerWord in headerLabels)
    {
        if (headerWord == "Start Date")
        {
             int j = 1;
             foreach (DataGridViewRow row in DataGrid2.Rows)
             {
                 string[] dataWords = lines[j].Split(',');
                 DataRow dr = dtable.NewRow();
                 for (int k = 0; k < row.Cells.Count; k++)
                 {
                    dr[k] = row.Cells[k].Value;
                 }
                 dr["Start Date"] = dataWords[j];
                 dtable.Rows.Add(dr);
                 j++;
             }
        }
    }
}

DataGrid2.DataSource = dtable;

推荐阅读