Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#将DataGridView导出为CSV文件_C#_Winforms_Csv_Datagridview_Export To Csv - Fatal编程技术网

C#将DataGridView导出为CSV文件

C#将DataGridView导出为CSV文件,c#,winforms,csv,datagridview,export-to-csv,C#,Winforms,Csv,Datagridview,Export To Csv,正如你可以看到的图片,我已经附上下面我有一些麻烦转换成一个有效的csv文件。我就快到了,但我想不出我需要的最后一点。我需要将列标题放入文本框,还需要删除每行末尾的“,”。顺便说一句,我正在转换顶部DGV 这是我的密码- private void btnSave_Click(object sender, EventArgs e) { int countRow = dgvCsv1.RowCount; int cellCount = dgvCsv1.Rows

正如你可以看到的图片,我已经附上下面我有一些麻烦转换成一个有效的csv文件。我就快到了,但我想不出我需要的最后一点。我需要将列标题放入文本框,还需要删除每行末尾的“,”。顺便说一句,我正在转换顶部DGV

这是我的密码-

private void btnSave_Click(object sender, EventArgs e)
    {
        int countRow = dgvCsv1.RowCount;
        int cellCount = dgvCsv1.Rows[0].Cells.Count;


        for (int rowIndex = 0; rowIndex <= countRow -1; rowIndex++)
        {
            for (int cellIndex = 0; cellIndex <= cellCount - 1; cellIndex++)
            {
                textBoxExport.Text = textBoxExport.Text + dgvCsv1.Rows[rowIndex].Cells[cellIndex].Value.ToString() + ",";
            }
            textBoxExport.Text = textBoxExport.Text + "\r\n";
        }

        System.IO.File.WriteAllText(lblFilePath.Text, textBoxExport.Text);
    }
private void btnSave\u单击(对象发送者,事件参数e)
{
int countRow=dgvCsv1.RowCount;
int cellCount=dgvCsv1.Rows[0].Cells.Count;

对于(int rowIndex=0;rowIndex,此问题已经解决。LINQ解决方案完全满足您的要求

var sb = new StringBuilder();

var headers = dgvCsv1.Columns.Cast<DataGridViewColumn>();
sb.AppendLine(string.Join(",", headers.Select(column => "\"" + column.HeaderText + "\"").ToArray()));

foreach (DataGridViewRow row in dgvCsv1.Rows)
{
    var cells = row.Cells.Cast<DataGridViewCell>();
    sb.AppendLine(string.Join(",", cells.Select(cell => "\"" + cell.Value + "\"").ToArray()));
}
var sb=new StringBuilder();
var headers=dgvCsv1.Columns.Cast();
sb.AppendLine(string.Join(“,”,headers.Select(column=>“\”+column.HeaderText+“\”).ToArray());
foreach(dgvCsv1.Rows中的DataGridViewRow行)
{
var cells=row.cells.Cast();
sb.AppendLine(string.Join(“,”,cells.Select(cell=>“\”+cell.Value+“\”).ToArray());
}
因此,最终的代码如下所示:

private void btnSave_Click(object sender, EventArgs e)
    {
        var sb = new StringBuilder();

        var headers = dgvCsv1.Columns.Cast<DataGridViewColumn>();
        sb.AppendLine(string.Join(",", headers.Select(column => "\"" + column.HeaderText + "\"").ToArray()));

        foreach (DataGridViewRow row in dgvCsv1.Rows)
        {
            var cells = row.Cells.Cast<DataGridViewCell>();
            sb.AppendLine(string.Join(",", cells.Select(cell => "\"" + cell.Value + "\"").ToArray()));
        }
        textBoxExport.Text = sb.ToString();

        System.IO.File.WriteAllText(lblFilePath.Text, textBoxExport.Text);
    }
private void btnSave\u单击(对象发送者,事件参数e)
{
var sb=新的StringBuilder();
var headers=dgvCsv1.Columns.Cast();
sb.AppendLine(string.Join(“,”,headers.Select(column=>“\”+column.HeaderText+“\”).ToArray());
foreach(dgvCsv1.Rows中的DataGridViewRow行)
{
var cells=row.cells.Cast();
sb.AppendLine(string.Join(“,”,cells.Select(cell=>“\”+cell.Value+“\”).ToArray());
}
textBoxExport.Text=sb.ToString();
System.IO.File.writealText(lblFilePath.Text,textBoxExport.Text);
}

这已经解决了。LINQ解决方案正是您想要的

var sb = new StringBuilder();

var headers = dgvCsv1.Columns.Cast<DataGridViewColumn>();
sb.AppendLine(string.Join(",", headers.Select(column => "\"" + column.HeaderText + "\"").ToArray()));

foreach (DataGridViewRow row in dgvCsv1.Rows)
{
    var cells = row.Cells.Cast<DataGridViewCell>();
    sb.AppendLine(string.Join(",", cells.Select(cell => "\"" + cell.Value + "\"").ToArray()));
}
var sb=new StringBuilder();
var headers=dgvCsv1.Columns.Cast();
sb.AppendLine(string.Join(“,”,headers.Select(column=>“\”+column.HeaderText+“\”).ToArray());
foreach(dgvCsv1.Rows中的DataGridViewRow行)
{
var cells=row.cells.Cast();
sb.AppendLine(string.Join(“,”,cells.Select(cell=>“\”+cell.Value+“\”).ToArray());
}
因此,最终的代码如下所示:

private void btnSave_Click(object sender, EventArgs e)
    {
        var sb = new StringBuilder();

        var headers = dgvCsv1.Columns.Cast<DataGridViewColumn>();
        sb.AppendLine(string.Join(",", headers.Select(column => "\"" + column.HeaderText + "\"").ToArray()));

        foreach (DataGridViewRow row in dgvCsv1.Rows)
        {
            var cells = row.Cells.Cast<DataGridViewCell>();
            sb.AppendLine(string.Join(",", cells.Select(cell => "\"" + cell.Value + "\"").ToArray()));
        }
        textBoxExport.Text = sb.ToString();

        System.IO.File.WriteAllText(lblFilePath.Text, textBoxExport.Text);
    }
private void btnSave\u单击(对象发送者,事件参数e)
{
var sb=新的StringBuilder();
var headers=dgvCsv1.Columns.Cast();
sb.AppendLine(string.Join(“,”,headers.Select(column=>“\”+column.HeaderText+“\”).ToArray());
foreach(dgvCsv1.Rows中的DataGridViewRow行)
{
var cells=row.cells.Cast();
sb.AppendLine(string.Join(“,”,cells.Select(cell=>“\”+cell.Value+“\”).ToArray());
}
textBoxExport.Text=sb.ToString();
System.IO.File.writealText(lblFilePath.Text,textBoxExport.Text);
}
  • 删除最后一个分隔符(逗号)
  • 您已经有了列数
    ColumnCount,
    ,因此,在循环遍历列时,需要简单检查
    currentColumn
    是否“小于”列数
    ColumnCount
    -1。如果
    currentColumn
    小于
    ColumnCount
    -1,则需要添加“逗号”
    。如果
    currentColumn
    不“小于”
    ColumnCount
    ,则这只能意味着一件事……这是最后一列,而不是添加要添加新行的逗号

    if (currentCol < ColumnCount - 1) {
      textBoxExport.Text += ",";
    }
    else {
      textBoxExport.Text += Environment.NewLine;
    }
    
    最后,不清楚为什么要使用
    TextBox
    来存储CSV字符串。我建议使用
    StringBuilder。
    下面是上述内容的一个示例

    private void btnSave_Click(object sender, EventArgs e) {
      StringBuilder sb = new StringBuilder();
      int RowCount = dgvCsv1.RowCount;
      int ColumnCount = dgvCsv1.ColumnCount;
    
      // get column headers
      for (int currentCol = 0; currentCol < ColumnCount; currentCol++) {
        sb.Append(dgvCsv1.Columns[currentCol].Name);
        if (currentCol < ColumnCount - 1) {
          sb.Append(",");
        }
        else {
          sb.AppendLine();
        }
      }
    
      // get the rows data
      for (int currentRow = 0; currentRow < RowCount; currentRow++) {
        if (!dgvCsv1.Rows[currentRow].IsNewRow) {
          for (int currentCol = 0; currentCol < ColumnCount; currentCol++) {
            if (dgvCsv1.Rows[currentRow].Cells[currentCol].Value != null) {
              sb.Append(dgvCsv1.Rows[currentRow].Cells[currentCol].Value.ToString());
            }
            if (currentCol < ColumnCount - 1) {
              sb.Append(",");
            }
            else {
              sb.AppendLine();
            }
          }
        }
      }
      textBoxExport.Text = sb.ToString();
      System.IO.File.WriteAllText(@"D:\Test\DGV_CSV_EXPORT.csv", sb.ToString());
    }
    
    private void btnSave\u单击(对象发送者,事件参数e){
    StringBuilder sb=新的StringBuilder();
    int RowCount=dgvCsv1.RowCount;
    int ColumnCount=dgvCsv1.ColumnCount;
    //获取列标题
    对于(int currentCol=0;currentCol
  • 删除最后一个分隔符(逗号)
  • 您已经有了列数
    ColumnCount,
    ,因此,在循环遍历列时,需要简单检查
    currentColumn
    是否“小于”列数
    ColumnCount
    -1。如果
    currentColumn
    小于
    ColumnCount
    -1,则需要添加“逗号”
    。如果
    currentColumn
    不“小于”
    ColumnCount
    ,则这只能意味着一件事……这是最后一列,而不是添加要添加新行的逗号

    if (currentCol < ColumnCount - 1) {
      textBoxExport.Text += ",";
    }
    else {
      textBoxExport.Text += Environment.NewLine;
    }
    
    最后,不清楚为什么要使用
    TextBox
    来存储CSV字符串。我建议使用
    StringBuilder。
    下面是上述内容的一个示例

    private void btnSave_Click(object sender, EventArgs e) {
      StringBuilder sb = new StringBuilder();
      int RowCount = dgvCsv1.RowCount;
      int ColumnCount = dgvCsv1.ColumnCount;
    
      // get column headers
      for (int currentCol = 0; currentCol < ColumnCount; currentCol++) {
        sb.Append(dgvCsv1.Columns[currentCol].Name);
        if (currentCol < ColumnCount - 1) {
          sb.Append(",");
        }
        else {
          sb.AppendLine();
        }
      }
    
      // get the rows data
      for (int currentRow = 0; currentRow < RowCount; currentRow++) {
        if (!dgvCsv1.Rows[currentRow].IsNewRow) {
          for (int currentCol = 0; currentCol < ColumnCount; currentCol++) {
            if (dgvCsv1.Rows[currentRow].Cells[currentCol].Value != null) {
              sb.Append(dgvCsv1.Rows[currentRow].Cells[currentCol].Value.ToString());
            }
            if (currentCol < ColumnCount - 1) {
              sb.Append(",");
            }
            else {
              sb.AppendLine();
            }
          }
        }
      }
      textBoxExport.Text = sb.ToString();
      System.IO.File.WriteAllText(@"D:\Test\DGV_CSV_EXPORT.csv", sb.ToString());
    }
    
    private void btnSave\u单击(对象发送者,事件参数e){
    StringBuilder sb=新的StringBuilder();
    int RowCount=dgvCsv1.RowCount;
    int ColumnCount=dgvCsv1.ColumnCount;
    //获取列标题
    对于(int currentCol=0;currentCol