Я собираюсь разработать приложение Silverlight, которое отображает большой объем информации в DataGrid.
Я хочу как-то дать пользователям возможность копировать это в Excel через буфер обмена.
Возможно ли это вообще в Silverlight 3?
Я собираюсь разработать приложение Silverlight, которое отображает большой объем информации в DataGrid.
Я хочу как-то дать пользователям возможность копировать это в Excel через буфер обмена.
Возможно ли это вообще в Silverlight 3?
Нет, эта функция недоступна в SL3.
Пожалуйста, прочтите (ссылки говорят о версии 2, но с тех пор она не изменилась):
Скопировать текст в буфер обмена?
Сохранение текста в буфере обмена с помощью Silverlight 2
Хорошо, я понял, как это сделать, но это не совсем элегантно.
Прежде всего, я поднял функцию 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 через буфер обмена возможно. Вроде, как бы, что-то вроде.
Я действительно рекомендую использовать это решение со скрытым текстовым полем:
Я использовал его, чтобы получить функциональность копирования и вставки из Excel в сетку данных, и он работает очень хорошо.
HTH