DataGridView Копировать Вставить (со стилем, цвет фона, ...) - PullRequest
2 голосов
/ 26 мая 2009

У меня есть приложение C # Windows Form с DataGridView.

Копировать и вставить (Ctrl-C после выбора данных в сетке данных и Ctrl-V в Excel) работает почти нормально.

Проблема в том, что стиль (например, цвет фона) не вставляется в Excel, а только значения ячеек. Нужно ли мне изменить свойство где-нибудь в моем datagridview или реализовать собственный код?

Спасибо

Ответы [ 2 ]

0 голосов
/ 14 июля 2011

У меня была та же проблема, и я использовал Control.DrawToBitmap для добавления растрового изображения в ClipBoard. Используя сначала объект DataObject, заполненный «стандартным» содержимым буфера обмена из DataGridView, затем добавляя растровое изображение, затем помещая объект 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 довольно сложный. Однако есть несколько примеров кода, которые можно найти.

И я только что наткнулся на этот пример , используя XML-вывод для Excel и других форматов.

0 голосов
/ 27 мая 2009

AFAIK единственное свойство сетки данных, которое влияет на поведение буфера обмена, это "ClipBoardCopyMode", и это в значительной степени "использовать заголовки или нет". Если я не оторвался от базы, если вы хотите, чтобы форматирование сопровождало его, вам придется поместить его в буфер обмена самостоятельно. Но, честно говоря, как пользователь, я бы не хотел форматирования. Это сводит меня с ума, когда я копирую вещи, а затем приходится переформатировать их, чтобы они соответствовали формату, который я сейчас использую. Я бы предпочел вставить данные, а затем, если я хочу отформатировать их, как показано, сделать это. Если вы собираетесь накатывать свои собственные, я бы предложил использовать формат буфера обмена Excel, чтобы ваш пользователь мог «PasteSpecial» значения, если они этого хотят. Это может дать вам несколько идей: http://www.codeguru.com/vb/gen/vb_misc/samples/article.php/c6393

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...