Silverlight 3 中的剪贴板支持

发布于 2024-07-30 03:01:19 字数 138 浏览 1 评论 0原文

我正在考虑开发一个在 DataGrid 中显示大量信息的 Silverlight 应用程序。

我希望以某种方式让用户能够通过剪贴板将其复制到 Excel 中。

这在 Silverlight 3 中可能实现吗?

I'm looking at developing a Silverlight application that displays a lot of information in a DataGrid.

I want to somehow give the users the ability to copy this into Excel via the clipboard.

Is this even possible in Silverlight 3?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

郁金香雨 2024-08-06 03:01:20

我真的建议使用隐藏文本框使用此解决方案:

http://weblogs.asp.net/manishdalal/archive/2008/11/12/cross-browser-copy-and-paste-in -datagrid-with-excel-support-part-1.aspx

我用它来将 Excel 中的复制和粘贴功能复制到数据网格中,效果非常好。

华泰

I really recommend using this solution using a hidden textbox:

http://weblogs.asp.net/manishdalal/archive/2008/11/12/cross-browser-copy-and-paste-in-datagrid-with-excel-support-part-1.aspx

I've used it to get copy and paste functionality from excel into a datagrid and it works very nicely.

HTH

眼中杀气 2024-08-06 03:01:20

好的,我已经知道如何做到这一点,但它并不完全优雅。

首先,我从 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。 有点。

OK, I've figured out how to do it, but it's not exactly elegant.

First of all, I lifted the CopyClipboard function from Jeff Wilcox's Blog.

Now I've written code to generate an HTML table from the grid, and put that into the clipboard.

    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()); 
    }

It's especially bad because it's calling

clipboardData.Invoke("setData", "text", text);

rather than

clipboardData.Invoke("setData", "text/html", text);

Because the second one throws a "System.InvalidOperation" exception. That means if you copy it into Word instead of Excel it isn't a table, it's a block of HTML.

But, yes, copying the datagrid contents to Excel via the clipboard is possible. Sort of.

自我难过 2024-08-06 03:01:20

不可以,SL3 中不提供此功能。

请阅读(链接谈论版本 2,但从那时起就没有改变):

将文本复制到剪贴板?

使用 Silverlight 2 在剪贴板中存储文本

No, this feature isn't available in SL3.

Please read (Links talk about version 2, but that hasn't changed ever since):

Copy text to clipboard?

Storing text in the clipboard using Silverlight 2

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文