问题
I want to write the data from my DataGridView to a textfile.
The following code writes the data but it is not formatted correctly.
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();
I want the output format to be like:
AAAA, BBBB, CCCC, DDDD
But instead it displays the following:
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..
回答1:
Init lines in first loop :
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();
回答2:
Unfortunately looping through rows and columns is prone to errors and not very succinct. Here is a little hack that takes advantage of Windows.Forms.Clipboard and DataGridView.GetClipboardContent() to do all the dirty work for you. DataGridView.GetClipboardContent() returns all the selected data cells as a DataObject, which is how the Clipboard class is able to store different types of data and formatting. The contents of the clipboard are then written to a file using the File class. You say you want a text file, but I see commas the example of your desired output, so I am assuming you would like a CSV file. You can also write out a text file by changing the Clipboard.GetText parameter.
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));
}
Please note that an object must be serializable for it to be put on the Clipboard.
For a tab-delimited file, use the TextDataFormat.Text enum in your call to Clipboard.GetText(). You can also output your DataGridView as HTML by using TextDataFormat.Html instead of TextDataFormat.CommaSeparatedValue, but there is extra header data you have to parse out.
Hope this helps.
来源:https://stackoverflow.com/questions/19311535/writing-to-a-text-file-from-datagridview-in-c-sharp-windows-form