2013-10-11 36 views
0

我想将我的DataGridView中的数据写入文本文件。以C#窗体形式从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.. 

回答

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(); 
+0

不能相信我没有想出那部分!谢谢你的帮助 – User1204501

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

请注意,一个对象必须可序列化才能放到剪贴板上。

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

希望这会有所帮助。

相关问题