我想将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..
答案 0 :(得分: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();
答案 1 :(得分:1)
不幸的是,循环遍历行和列很容易出错,而且不是很简洁。这是一个利用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));
}
请注意,对象必须是可序列化的,才能将其放在剪贴板上。
对于制表符分隔文件,请在致电TextDataFormat.Text
时使用Clipboard.GetText()
枚举。您还可以使用TextDataFormat.Html
而不是TextDataFormat.CommaSeparatedValue
将DataGridView作为HTML输出,但是您需要解析额外的标题数据。
希望这有帮助。