0

我想将我的数据写入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..
4

2 回答 2

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(); 
于 2013-10-11T06:24:29.860 回答
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而不是将 DataGridView 输出为 HTML TextDataFormat.CommaSeparatedValue,但是您必须解析出额外的标头数据。

希望这可以帮助。

于 2014-09-26T04:54:16.647 回答