C# 将CSV转换为数据表

C# 将CSV转换为数据表,c#,asp.net,csv,export,C#,Asp.net,Csv,Export,我有一个返回csv行的方法。但是我想把它转换成一个数据表。也就是说,只要是“,”我就想把数据放到一个新的列单元格中 private static string ConvertGridViewRowToCsvRow(GridViewRow row) { StringBuilder csvRow = new StringBuilder(); bool firstCell = true; foreach (DataControlFieldCell ce

我有一个返回csv行的方法。但是我想把它转换成一个数据表。也就是说,只要是“,”我就想把数据放到一个新的列单元格中

private static string ConvertGridViewRowToCsvRow(GridViewRow row)
{
        StringBuilder csvRow = new StringBuilder();
        bool firstCell = true;

        foreach (DataControlFieldCell cell in row.Cells)
        {
            string text = string.Empty;

            if (!String.IsNullOrEmpty(cell.Text))
            {
                text = cell.Text;
            }
            else if (cell.Controls.Count > 0)
            {
                foreach (var control in cell.Controls)
                {
                    if (control is ITextControl)
                    {
                        var textControl = control as ITextControl;
                        text += HttpUtility.HtmlDecode(textControl.Text).Replace("\r", string.Empty).Replace("\n", string.Empty).Trim();
                    }
                    else if (control is TextImage)
                    {
                        var textImage = control as TextImage;
                        text += HttpUtility.HtmlDecode(textImage.Text).Replace("\r", string.Empty).Replace("\n", string.Empty).Trim();
                    }
                }
            }

            if (!firstCell)
            {
                csvRow.Append(",");
            }

            csvRow.Append(MakeTextCsvFriendly(text));
            firstCell = false;
        }

        return csvRow.ToString();
}
这是在调用
ConvertGridViewRowTocsRow

public static void Export(string fileName, GridView gv, HashSet<string> selectedRows)
{
        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.AddHeader(
            "content-disposition", string.Format("attachment; filename={0}", fileName));
        HttpContext.Current.Response.ContentType = "text/csv";

        //SetHiddenColumnsVisibility(gv); enable if you want only selected columns to visible on export (not current business requirement)

        var csvFile = new StringBuilder();

        using (StringWriter sw = new StringWriter())
        {
            using (HtmlTextWriter htw = new HtmlTextWriter(sw))
            {
                if (gv.HeaderRow != null)
                {
                    GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);
                    bool firstCell = true;

                    foreach (DataControlFieldHeaderCell cell in gv.HeaderRow.Cells)
                    {
                        if (!firstCell)
                        {
                            csvFile.Append(",");
                        }

                        string text = cell.ContainingField.HeaderText;
                        csvFile.Append(MakeTextCsvFriendly(text));
                        firstCell = false;
                    }

                    csvFile.Append("\r\n");
                }

                if (selectedRows.Count > 0)
                {
                    foreach (GridViewRow row in gv.Rows)
                    {
                        if (row.RowType == DataControlRowType.DataRow && selectedRows.Contains(gv.DataKeys[row.RowIndex].Value.ToString()))
                        {
                            GridViewExportUtil.PrepareControlForExport(row);
                            csvFile.AppendLine(ConvertGridViewRowToCsvRow(row));
                        }
                    }
                }
                else
                {
                    foreach (GridViewRow row in gv.Rows)
                    {
                        GridViewExportUtil.PrepareControlForExport(row);
                        csvFile.AppendLine(ConvertGridViewRowToCsvRow(row));
                    }
                }

                //  render the htmlwriter into the response
                HttpContext.Current.Response.Write(csvFile.ToString());
                HttpContext.Current.Response.End();
            }
        }
    }
publicstaticvoid导出(字符串文件名、GridView gv、HashSet selectedRows)
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader(
“内容处置”,string.Format(“附件;文件名={0}”,文件名));
HttpContext.Current.Response.ContentType=“text/csv”;
//SetHiddenColumnsVisibility(gv);如果希望导出时仅显示选定列(而不是当前业务需求),则启用
var csvFile=新的StringBuilder();
使用(StringWriter sw=new StringWriter())
{
使用(HtmlTextWriter htw=新的HtmlTextWriter(sw))
{
如果(gv.HeaderRow!=null)
{
GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);
bool firstCell=true;
foreach(gv.HeaderRow.Cells中的DataControlFieldHeaderCell单元)
{
if(!firstCell)
{
csvFile.Append(“,”);
}
字符串文本=cell.ContainingField.HeaderText;
Append(MakeTextCsvFriendly(text));
firstCell=false;
}
csvFile.Append(“\r\n”);
}
如果(selectedRows.Count>0)
{
foreach(gv.Rows中的GridViewRow行)
{
如果(row.RowType==DataControlRowType.DataRow&&selectedRows.Contains(gv.DataKeys[row.RowIndex].Value.ToString())
{
GridViewExportUtil.PrepareControlForExport(行);
AppendLine(convertGridViewRowTocsRow(行));
}
}
}
其他的
{
foreach(gv.Rows中的GridViewRow行)
{
GridViewExportUtil.PrepareControlForExport(行);
AppendLine(convertGridViewRowTocsRow(行));
}
}
//将htmlwriter呈现到响应中
HttpContext.Current.Response.Write(csvFile.ToString());
HttpContext.Current.Response.End();
}
}
}
我正在考虑一种方法,它将取代
csvFile.Append(“,”)
或可能使用此类文件将数据存储在数据表中的文件

然而,我需要指导来构建这个方法

我尝试使用下面的代码将csv文件转换为windows应用程序的datatable


如果工作正常,请不要忘记将其标记为答案。您的代码没有编译或对我不起作用。在包括“使用Microsoft.VisualBasic.FileIO;”并将“filePath”更改为“filePath”之后,我仍然得到一个System.ArgumentException:输入数组的长度超过了此表中的列数。
private void CSVtoDataTable(string filepath)
{
  int count = 1;            
  char fieldSeparator = ',';
  DataTable csvData = new DataTable();

  using (TextFieldParser csvReader = new TextFieldParser(filePath))
  {                   
      csvReader.HasFieldsEnclosedInQuotes = true;                  
      while (!csvReader.EndOfData)
      {
           csvReader.SetDelimiters(new string[] { "," });
           string[] fieldData = csvReader.ReadFields(); 
           if(count==0)
           {
               foreach (string column in fieldData)
               {
                  DataColumn datecolumn = new DataColumn(column);
                  datecolumn.AllowDBNull = true;
                  csvData.Columns.Add(datecolumn);
               }
           }  
           else 
           {
               csvData.Rows.Add(fieldData);
           }                  

       }
     }

 }