如何发送到剪贴板datagridview内容,如CTRL-C

时间:2014-06-06 20:35:13

标签: c# datagridview clipboard

如何从DataGridView向剪贴板选择内容,模拟CTRL-C行为。

这不按预期工作:

 Clipboard.SetText(this.dataGridView1.SelectedCells.ToString());

用户需要粘贴Excel。 CTRL-C工作正常,但我需要为上下文菜单编写脚本。

2 个答案:

答案 0 :(得分:1)

SelectedCellsCellCollection,因此没有有用的ToString方法。

如果您只想复制一个单元格,您必须决定哪个,然后复制其Value,例如:

Clipboard.SetText(this.dataGridView1.SelectedCells[0].Value.ToString());

如果你想要复制一个范围的单元格,事情会变得更复杂,特别是如果单元格区域不连续的话。但Crtl-C也无法在DGV的单元格范围内工作 - &gt ;剪贴板 - > Excel中。

对于简单范围,如果需要,您应该能够通过连接单元格值TABs来构建必要的字符串以移动单元格向右,CRLF转到下一行..你需要吗?

注意:在尝试访问SelectedCells[0]之前,您需要检查是否SelectedCells.Count > 0

答案 1 :(得分:0)

要模拟按ctrl c的效果,您可以使用DataGridView.GetClipboardContent()。例如:

Clipboard.SetText(this.dataGridView1.GetClipboardContent())

As described on MSDN:

此方法检索表示所选单元格定义的区域的数据。该区域是包含所有选定单元格的最小矩形。

通过调用DataGridViewCell.GetClipboardContent方法检索此区域中每个选定单元格的值。空白占位符值用于此区域中未选定的单元格。此方法将这些值组合到DataObject中,该DataObject包含用于复制到剪贴板的多种格式。

支持的剪贴板格式包括DataFormats.Text,DataFormats.UnicodeText,DataFormats.Html和DataFormats.CommaSeparatedValue。