2016-06-21 4 views
0

나는 csv 행을 반환하는 메서드가 있습니다. 그러나 나는 이것을 datatable로 변환하고 싶다. 의미는 어디서든 ","어디서나 새로운 열 셀에 데이터를 넣고 싶습니다. CSV를 Datatable으로 변환

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(); 
} 

은을 저장하는 데 이러한 파일을 사용하는 것이 csvFile.Append(","); 또는 가능 하나를 대체 할 ConvertGridViewRowToCsvRow

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(); 
      } 
     } 
    } 
나는 방법을 생각

를 호출하는 버튼 클릭시 호출되는 방법입니다 DataTable의 데이터.

그러나이 방법을 구성하는 데 지침이 필요합니다.

+0

는 [FileHelpers] (http://www.filehelpers.net/)가 잘 작동 만약 당신이 대답으로 표시하는 것을 잊지 마세요, –

답변

-1

나는 csv 파일을 Windows 응용 프로그램 용 datatable로 변환하기 위해 아래 코드를 시도합니다.

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); 
      }     

     } 
    } 

} 
+0

을 필요로하는 모든 것입니다. –

+0

코드가 컴파일되거나 작동하지 않았습니다. "using Microsoft.VisualBasic.FileIO;"를 포함시킨 후 "filePath"를 "filepath"로 변경하면 System.ArgumentException이 발생합니다. 입력 배열이이 테이블의 열 수보다 깁니다. – Miryafa