2009-07-29 37 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