[英]Writing to a text file from DataGridView in C# windows form
我想将数据从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..
第一个循环中的初始化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();
不幸的是,在行和列之间循环很容易出错,而且不太简洁。 这是一个利用Windows.Forms.Clipboard
和DataGridView.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,但是还需要解析额外的标头数据。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.