将CSV导入Gridview

时间:2014-08-18 07:13:13

标签: c# asp.net csv gridview

请帮忙!

我正在尝试将数据从csv导入到网格中,然后将数据保存到数据库中......问题是无论我尝试什么,这些行都是读垃圾或某些我不知道的格式。这是我第一次尝试导入我的asp.net Gridview,但它无法正常工作。如果有人能以正确的方式指导我,我会很感激!

这就是我所做的:

    private object ReadToEnd(string filePath)
{
    DataTable dtDataSource = new DataTable();

    string[] fileContent = File.ReadAllLines(filePath);

    if (fileContent.Count() > 0)
    {
        string[] columns = fileContent[0].Split(',');
        for (int i = 0; i < columns.Count(); i++)
        {
            dtDataSource.Columns.Add(columns[i]);
        }

        for (int i = 1; i < fileContent.Count(); i++)
        {
            string[] rowData = fileContent[i].Split(',');
            dtDataSource.Rows.Add(rowData);
        }
    }

    gvTest.DataSource = dtDataSource;
    gvTest.DataBind();

}

我只需要整个csv中的一列是SerialNo。收到正确的信息后,我会在插入数据库(sql)之前绑定其余的数据......

这就是它正在阅读的内容:

enter image description here

在读取数据后,它给出了一条错误消息:“输入数组比此表中的列数长。”

我尝试过另一种方式:

       private static DataTable GetDataTabletFromCSVFile(string path)
{
    DataTable csvData = new DataTable();
    csvData.Columns.Add("SerialNo", typeof(string));
 //   csvData.Columns.Add("MachineDetailsRef", typeof(int));

    try
    {           
        using (TextFieldParser csvReader = new TextFieldParser( path))
        {
            csvReader.SetDelimiters(new string[] { "," });
            csvReader.HasFieldsEnclosedInQuotes = true;
            string[] colFields = csvReader.ReadFields();
            foreach (string column in colFields)
            {
                DataColumn serialno = new DataColumn(column);
                serialno.AllowDBNull = true;
                csvData.Columns.Add(serialno);
            }

            while (!csvReader.EndOfData)
            {
                string[] fieldData = csvReader.ReadFields();
                //Making empty value as null
                for (int i = 0; i < fieldData.Length; i++)
                {
                    if (fieldData[i] == "")
                    {
                        fieldData[i] = null;
                    }
                }
                csvData.Rows.Add(fieldData);
            }

        }
    }
    catch (Exception ex)
    {
    }
    return csvData;
}

这给出了与先前尝试完全相同的数据:

    ![enter image description here][2]

但是在这种方法中,我没有收到任何错误,Grid被填充为:

enter image description here

任何帮助将不胜感激!感谢

编辑-------------

这是我的csv文件:

enter image description here

1 个答案:

答案 0 :(得分:1)

注意:如果CSV文件编码与ANSI不同?然后你应该使用以下StreamReader

StreamReader MyStreamReader = new StreamReader(path, System.Text.Encoding.Unicode);

否则,我在代码中做了一些更改。见下文:

 private static DataTable GetDataTabletFromCSVFile(string path)
 {
    DataTable csvData = new DataTable();        

    try
    {           
        using (TextFieldParser csvReader = new TextFieldParser( path))
        {
           csvReader.SetDelimiters(new string[] { "," });
           csvReader.HasFieldsEnclosedInQuotes = true;
           string[] colFields = csvReader.ReadFields();

           foreach (string column in colFields)
           {
               DataColumn serialno = new DataColumn(column);
               serialno.AllowDBNull = true;                   
               csvData.Columns.Add(serialno);
           }

           while (!csvReader.EndOfData)
           {
                string[] fieldData = csvReader.ReadFields();
                DataRow dr = csvData.NewRow();
                //Making empty value as empty
                for (int i = 0; i < fieldData.Length; i++)
                {
                   if (fieldData[i] == null)                       
                       fieldData[i] = string.Empty;

                   dr[i] = fieldData[i];
                }
                csvData.Rows.Add(dr);              
            }

        }
    }
    catch (Exception ex)
    {
    }
    return csvData;
}