Поддержка буфера обмена в Silverlight 3

Я собираюсь разработать приложение Silverlight, которое отображает большой объем информации в DataGrid.

Я хочу как-то дать пользователям возможность копировать это в Excel через буфер обмена.

Возможно ли это вообще в Silverlight 3?


person Andrew Shepherd    schedule 29.07.2009    source источник


Ответы (3)


Нет, эта функция недоступна в SL3.

Пожалуйста, прочтите (ссылки говорят о версии 2, но с тех пор она не изменилась):

Скопировать текст в буфер обмена?

Сохранение текста в буфере обмена с помощью Silverlight 2

person Moayad Mardini    schedule 29.07.2009

Хорошо, я понял, как это сделать, но это не совсем элегантно.

Прежде всего, я поднял функцию CopyClipboard из блога Джеффа Уилкокса .

Теперь я написал код для создания таблицы HTML из сетки и поместил ее в буфер обмена.

    private void Clipboard_Button_Clicked(object sender, RoutedEventArgs e)
    {
        StringBuilder sb = new StringBuilder();
        sb.Append("<TABLE>");
        foreach (object obj in myDataGrid.ItemsSource)
        {
            sb.Append("<TR>");
            foreach (DataGridColumn c in myDataGrid.Columns)
            {
                sb.Append("<TD>");
                FrameworkElement el = c.GetCellContent(obj);
                TextBlock tb = el as TextBlock;
                if (tb != null)
                {
                    string s = tb.Text;
                    sb.Append(System.Windows.Browser.HttpUtility.HtmlEncode(tb.Text));
                }
                sb.Append("</TD>");
            }
            sb.Append("</TR>");
        }
        sb.Append("</TABLE>");
        Clipboard.SetText(sb.ToString()); 
    }

Это особенно плохо, потому что он звонит

clipboardData.Invoke("setData", "text", text);

скорее, чем

clipboardData.Invoke("setData", "text/html", text);

Потому что второй выдает исключение «System.InvalidOperation». Это означает, что если вы скопируете его в Word вместо Excel, это будет не таблица, а блок HTML.

Но да, копирование содержимого таблицы данных в Excel через буфер обмена возможно. Вроде, как бы, что-то вроде.

person Andrew Shepherd    schedule 29.07.2009
comment
Взлом Flash - это довольно круто, но спасибо за ссылку на него. Я надеюсь, что мы добавим улучшенную поддержку буфера обмена в будущую версию Silverlight, это будет полезно для расширенных сеток и других элементов управления. - person Jeff Wilcox; 05.08.2009

Я действительно рекомендую использовать это решение со скрытым текстовым полем:

http://weblogs.asp.net/manishdalal/archive/2008/11/12/cross-browser-copy-and-paste-in-datagrid-with-excel-support-part-1.aspx

Я использовал его, чтобы получить функциональность копирования и вставки из Excel в сетку данных, и он работает очень хорошо.

HTH

person Community    schedule 30.07.2009