从C#windows窗体中的DataGridView写入文本文件

时间:2013-10-11 06:22:22

标签: c# datagridview streamwriter

我想将DataGridView中的数据写入文本文件。

以下代码会写入数据,但格式不正确。

StreamWriter sW = new StreamWriter(dirLocationString);

string lines = "";

for (int row = 0; row< numRows1; row++){
     for (int col = 0; col < 4; col++)
         {

          lines = lines + " " + dataGridView1.Rows[row].Cells[col].Value.ToString();

         }

      sW.WriteLine(lines);
}

   sW.Close();   

我希望输出格式如下:

AAAA, BBBB, CCCC, DDDD 

但它显示以下内容:

AAAA BBBB CCCC DDDD
AAAA BBBB CCCC DDDD AAAA BBBB CCCC DDDD
AAAA BBBB CCCC DDDD AAAA BBBB CCCC DDDD AAAA BBBB CCCC DDDD
and so on..

2 个答案:

答案 0 :(得分:3)

在第一个循环中

初始化lines

StreamWriter sW = new StreamWriter(dirLocationString);

for (int row = 0; row< numRows1; row++){
    string lines = "";
    for (int col = 0; col < 4; col++)
    {
        lines += (string.IsNullOrEmpty(lines) ? " " : ", ") + dataGridView1.Rows[row].Cells[col].Value.ToString();
    }

    sW.WriteLine(lines);
}

sW.Close(); 

答案 1 :(得分:1)

不幸的是,循环遍历行和列很容易出错,而且不是很简洁。这是一个利用Windows.Forms.ClipboardDataGridView.GetClipboardContent()来完成所有肮脏工作的小黑客。 DataGridView.GetClipboardContent()将所有选定的数据单元格作为DataObject返回,这就是Clipboard类能够存储不同类型的数据和格式的方式。然后使用File类将剪贴板的内容写入文件。你说你想要一个文本文件,但我看到逗号是你想要的输出的例子,所以我假设你想要一个CSV文件。您还可以通过更改Clipboard.GetText参数来写出文本文件。

void SaveDataGridViewToCSV(string Filename)
{
    // Choose whether to write header. Use EnableWithoutHeaderText instead to omit header.
    dataGridView1.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithAutoHeaderText;
    // Select all the cells
    dataGridView1.SelectAll();
    // Copy (set clipboard)
    Clipboard.SetDataObject(dataGridView1.GetClipboardContent());
    // Paste (get the clipboard and serialize it to a file)
    File.WriteAllText(Filename,Clipboard.GetText(TextDataFormat.CommaSeparatedValue));
}

请注意,对象必须是可序列化的,才能将其放在剪贴板上。

对于制表符分隔文件,请在致电TextDataFormat.Text时使用Clipboard.GetText()枚举。您还可以使用TextDataFormat.Html而不是TextDataFormat.CommaSeparatedValue将DataGridView作为HTML输出,但是您需要解析额外的标题数据。

希望这有帮助。