我在一个.Net应用程序(V4 C# VS2010)中有一个DataGridView,我想通过点击一个按钮将所有数据复制到剪贴板。没有问题-
private void copyToClipboard()
{
dataGridView1.SelectAll();
DataObject dataObj = dataGridView1.GetClipboardContent();
if (dataObj != null)
Clipboard.SetDataObject(dataObj);
}
问题是用户可能已经在DataGrid上选择了一些单元格、行等,而我并不想改变这个选择。上面的代码显然选择了所有内容。我可以使用dataGridView1.ClearSelection();在最后,这是稍微好一点,但仍然没有达到要求。
我可以保存所选单元格:
var mySelectedCells = dataGridView1.SelectedCells;
但是,如何在复制后在数据网格上重新选择这些选定的单元格?是否有一种简单的方法可以将选定的单元格集合放回数据网格中?也许有一种更好的方法可以首先将整个网格复制到剪贴板中,而不影响当前选定的单元格?
6条答案
按热度按时间qjp7pelc1#
我想,如果您只想将单元格的内容表示为文本,并将其复制到剪贴板中,以制表符分隔,您可以执行以下操作:
输出看起来与
GetClipboardContent()
非常相似,但是要注意任何DataGridViewImageColumns或任何不是隐式字符串的类型。**编辑:**Anthony是正确的,使用StringBuilder来避免为每个连接分配一个新的字符串。
svujldwt2#
下面是VB代码的C#版本,其中包含复制标题和仅复制选定行的选项。
a8jjtwal3#
您应该更改DataGridView的多选属性。以下是代码:
yizd12fk4#
您可能需要包含列标题:
jei2mxaa5#
我认为下面的方法将完全做你想要的。只要调用这个方法与DataGridView名称在按钮点击事件。
pexxcrt26#
DataGridView列可以是可见的/不可见的,也可以按照与创建时不同的顺序显示。此代码负责以下两个方面: