2009-07-29 92 views

回答

2

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是可能的。有点。

+0

闪存黑客是相当疯狂,但感谢链接到它。 我希望我们可以在未来的Silverlight版本中添加更好的剪贴板支持,对于高级网格和其他控件会很有用。 – 2009-08-05 19:49:14