2014-01-28 4 views
2

У меня есть datagrid, который я хочу, чтобы иметь возможность копировать и вставлять в/из excel. Довольно распространенный сценарий. У меня есть функции копирования и вставки. Тем не менее, это приложение имеет несколько datagrids, и я бы хотел, чтобы пользователь не пытался копировать данные из одной сетки в другую, поскольку данные разные.Скопируйте и вставьте в разные форматы

Я могу сериализовать объекты в этих сетках в любом формате, который я хочу, поэтому добавление каких-то метаданных, в которых говорится: «Эти данные идут только в этой сетке», тривиально. Но я не могу добавить метаданные, потому что тогда он появится в excel. Есть ли какое-то решение этой проблемы, которая позволяет мне вставлять данные в один формат в мое приложение, но что Excel все равно будет обрабатывать правильно?

ответ

5

Если вы посмотрите на clipboard class, вы можете установить текст, но есть еще немного больше, что вы можете с ним сделать. Большинство продвинутых вещей, которые вы хотите сделать с буфером обмена, вращаются вокруг пары подпрограмм «SetDataObject» и «GetDataObject». Для того, чтобы использовать это с несколькими форматами можно указать:

var serializableObject = new MyObject(); 

var clipData = new DataObject(); 
clipData.SetData(DataFormats.Text, "abcdefg"); 
clipData.SetData("CustomFormat", serializableObject); 
Clipboard.SetDataObject(data); 

После того, как вы сделали это, вы можете получить данные обратно из буфера обмена путем реверсирования этого и запрашивает данные из пользовательского формата. Кратко обратный вызов выглядит следующим образом:

var clipData = (DataObject)Clipboard.GetDataObject(); 
var myObject = clipData.GetData("CustomFormat") as MyObject; 

Для более полного примера от Microsoft, обратитесь к этой странице: http://msdn.microsoft.com/en-us/library/637ys738(v=vs.110).aspx. Просто взгляните на нижнюю часть, где объясняется использование нескольких форматов.

Надеюсь, это поможет. Удачи!

+0

Удивительный, спасибо! – ConditionRacer

Смежные вопросы