【问题标题】:Import Headerless CSV into Data Grid View using first row as header使用第一行作为标题将无标题 CSV 导入数据网格视图
【发布时间】:2013-05-10 03:06:50
【问题描述】:

我有以下代码从用户指定的 CSV 文件中提取数据。 CSV 文件没有任何标题,并且有四列数据。我正在尝试将此数据导入 dataGridView 数据源,但得到意外结果。每次,它都会占用第一行并将其作为标题列。我尝试在开头插入一行(注释掉的文本),但它只会将该行添加到数据源中,而不会将其视为标题。我不太担心有标题,但希望我的数据不要“省略”第一行,因为它将它视为标题。

string sql_select;
string strConnString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + Path.GetDirectoryName(odfDeficit.FileName).Trim() + ";Extensions=asc,csv,tab,txt";
DataSet ds = new DataSet();
OdbcConnection conn = new OdbcConnection(strConnString.Trim());
sql_select = "select * from [" + Path.GetFileName(odfDeficit.FileName).Trim() + "]";
OdbcDataAdapter obj_oledb_da = new OdbcDataAdapter(sql_select, conn);
obj_oledb_da.Fill(ds, "csv");

//DataRow dr;
//dr = ds.Tables["csv"].NewRow();
//dr[0] = "First Name";
//dr[1] = "Last Name";
//dr[2] = "Last Four of SSN";
//dr[3] = "Deficit Amount";
//ds.Tables["csv"].Rows.InsertAt(dr, 0);
dataGridView1.DataSource = ds.Tables["csv"];
conn.Close();

【问题讨论】:

    标签: c# csv datagridview datasource


    【解决方案1】:

    您是否尝试过为表显式创建列,然后使用 CSV 文件加载表?

    DataTable csvTable = new DataTable();
    
    csvTable.Columns.Add("FirstName", typeof(String));
    csvTable.Columns.Add("LastName", typeof(String));
    csvTable.Columns.Add("LastFourOfSSN", typeof(String));
    csvTable.Columns.Add("DeficitAmount", typeof(String));
    
    obj_oledb_da.Fill(csvTable);
    
    dataGridView1.DataSource = csvTable;
    

    我不能肯定这会奏效,但值得一试。

    另外,出于好奇,为什么要使用 Odbc?您可以使用 OleDb 甚至 Microsoft.VisualBasic.FileIO.TextFieldParser 类。我并不是说 Odbc 是错误的,只是提出了几种替代方法。

    【讨论】:

    • 当我尝试using Microsoft.VisualBasic.FileIO; 时,它给出了一个错误,提示找不到它。我以前从未使用过 Visual C#,但被赋予了在一天内学习它并创建 ETL 工具的任务。对我来说很糟糕。但是,我告诉他们,他们需要在他们提供给我的 CSV 中包含标题行。这是唯一可行的方法。我最喜欢你的方法。不确定它是否会起作用,但似乎足够合法。
    【解决方案2】:

    使用列名插入记录

    DataRow dr = ds.Tables["csv"].NewRow();
    dr.ItemArray = ds.Tables["csv"].Columns.Cast<DataColumn>().Select(c => c.ColumnName).ToArray();
    ds.Tables["csv"].Rows.InsertAt(dr,0);
    

    或者你可以试试A Fast CSV Reader

    【讨论】:

      猜你喜欢
      • 2023-02-13
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 2011-01-05
      • 1970-01-01
      • 2014-01-11
      • 2013-08-28
      • 2014-02-07
      相关资源
      最近更新 更多