我正在研究开发一个在DataGrid中显示大量信息的Silverlight应用程序。
我希望以某种方式让用户能够通过剪贴板将其复制到Excel中。
这在Silverlight 3中是否可行?
答案 0 :(得分:2)
不,SL3中没有此功能。
请阅读(链接谈论版本2,但此后一直没有改变):
答案 1 :(得分:2)
好的,我已经想出了怎么做,但它并不完全优雅。
首先,我从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块。
但是,是的,可以通过剪贴板将datagrid内容复制到Excel。排序。
答案 2 :(得分:2)
我真的建议使用隐藏文本框来使用此解决方案:
我已经用它来将excel中的复制和粘贴功能转换为数据网格,并且效果非常好。
HTH