我正在考虑开发一个Silverlight应用程序,在DataGrid中显示大量信息。
我希望以某种方式让用户通过剪贴板将其复制到Excel中。
在Silverlight 3中是否可能实现这一点?
我正在考虑开发一个Silverlight应用程序,在DataGrid中显示大量信息。
我希望以某种方式让用户通过剪贴板将其复制到Excel中。
在Silverlight 3中是否可能实现这一点?
好的,我已经想出了如何做到这一点,但并不十分优雅。
首先,我从Jeff Wilcox的博客中复制了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 是可能的。有点像。