首页 > 解决方案 > 在 C# 中从 CSV 读取不同的值到 Datagridview

问题描述

我有一个 CSV 文件,其中 A 列将根据Image 1具有重复值。在这个 CSV 文件中,我只希望我datagridview显示来自 A 列的不同值,并跳过标题为Name as per Image 1 的标题列。所以我datagridview应该按照Image 2显示。

但是,使用下面的代码,datagridview 显示为Image 3。下面是我的代码。我正在使用LinqCsvhelper。我使用了链接 1链接 2作为参考。希望能得到一些帮助

1级

    public string Name
    {
      get; set;
    }

表格 3

private void Form3_Load(object sender, EventArgs e)
{ 
    //Create Datatable
    DataSet dts = new DataSet();
    DataTable dataTable = new DataTable();
    dataTable.Columns.Add("Username", typeof(string));

    //Read the data from the CSV file
    StreamReader streamReader = new StreamReader(@"\Users\d_sim\Desktop\test.csv");
    CsvReader reader = new CsvReader(streamReader);
    reader.Configuration.Encoding = Encoding.UTF8;
    reader.Configuration.Delimiter = ",";

    //Make Class 1 into a list.
    List<Class1> records = reader.GetRecords<Class2>().ToList();

    //Only Read the applicable property and display in datagridview. IRL Class1 has many properties but I only include one in this question
    var distinctbyproperty = records.GroupBy(x => x.Name).Select(x => x.First());
    dataTable.Rows.Add(distinctbyproperty.ToString());
    dts.Tables.Add(dataTable);
    this.dataGridView1.DataSource = dataTable;
    dataGridView1.AllowUserToAddRows = false;
}

标签: c#linqcsvcsvhelper

解决方案


您的过滤工作正常。您只需将每一行单独添加到您的数据表中。

foreach (var item in distinctbyproperty)
{
    dataTable.Rows.Add(item.Name);
}

推荐阅读