2013-10-11 63 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輸出,但是您必須解析出額外的頭數據。

希望這會有所幫助。

相關問題