我正在开发一个在DataGrid中显示大量信息的Silverlight应用程序。Silverlight 3中的剪贴板支持
我想要以某种方式给予用户通过剪贴板复制到Excel的能力。
这在Silverlight 3中甚至可能吗?
我正在开发一个在DataGrid中显示大量信息的Silverlight应用程序。Silverlight 3中的剪贴板支持
我想要以某种方式给予用户通过剪贴板复制到Excel的能力。
这在Silverlight 3中甚至可能吗?
OK,我已经找到了如何做到这一点,但它不完全是优雅的。
首先,我从Jeff Wilcox's Blog中解除了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是可能的。有点。
不,该功能在SL3中不可用。
请阅读(链接谈2版本,但是这并没有因为不断变化):
+1的博客文章而导致黑客攻击的解决方案 – 2009-07-29 08:08:53
我真的建议使用使用隐藏的文本框此解决方案:
我用它来获得从Excel中复制和粘贴功能集成到一个DataGrid和它的作品非常漂亮。
HTH
闪存黑客是相当疯狂,但感谢链接到它。 我希望我们可以在未来的Silverlight版本中添加更好的剪贴板支持,对于高级网格和其他控件会很有用。 – 2009-08-05 19:49:14