我有一个带有DataGridView的C#Windows窗体应用程序。
复制&粘贴(在数据网格中选择数据后ctrl-c和Excel中的ctrl-v)工作得很好。
问题是样式(例如背景颜色)没有粘贴到Excel中,只粘贴了单元格值。我是否需要在datagridview上的某处更改属性或实现自定义代码?
谢谢,
答案 0 :(得分:0)
AFAIK唯一影响剪贴板行为的数据网格属性是“ClipBoardCopyMode”,几乎就是“使用标头或不使用标头”。除非我偏离基础,如果你想要格式化它,你将不得不自己把它放在剪贴板中。但说实话,作为用户我不想要格式化。当我复制东西然后必须重新格式化它们以匹配我当前使用的格式时,它让我疯狂。我宁愿粘贴数据,然后如果我想将其格式化为显示,那就这样做。 如果您打算自己动手,我建议您使用Excel剪贴板格式,以便用户可以根据需要使用“PasteSpecial”值。这可能会给你一些想法:http://www.codeguru.com/vb/gen/vb_misc/samples/article.php/c6393
答案 1 :(得分:0)
我遇到了同样的问题,并使用Control.DrawToBitmap
向ClipBoard添加位图。首先使用DataObject,使用DataGridView中的“标准”剪贴板内容填充,然后添加Bitmap,然后将DataObject推送到剪贴板,用户可以使用“粘贴特殊”功能并在位图或纯文本之间进行选择。类似的东西:
Dim data as New DataObject()
Dim html As DataObject = DGV.GetClipboardContent()
data.SetData(DataFormats.Html, html.GetData(DataFormats.Html))
' create some rectangle, probably using DataGridView.Bounds
Dim bitmap As New System.Drawing.Bitmap(rectangle.Width, rectangle.Height)
DGV.DrawToBitmap(bitmap, rectangle)
data.SetData(DataFormats.Bitmap, bitmap)
还可以创建RTF输出,但由于RTF代码非常复杂,因此这项工作要多得多。但是,有一些代码示例可供使用。
我只是使用Excel和其他格式的XML输出偶然发现了这个example。