我正在開發一個在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