gpt4 book ai didi

WPF DataGrid复制到剪贴板: how to influence data formats in the clipboard?

转载 作者:行者123 更新时间:2023-12-03 02:48:12 27 4
gpt4 key购买 nike

WPF DataGrid 有一个很好的默认功能,它将选定的单元格复制到剪贴板中,因此我们可以在其他应用程序中使用它。但看起来,复制过程可以在性能方面得到改进,并且我认为粘贴到 Excel 期间还存在某种......错误,需要修复。

<小时/>

复制错误的步骤(Excel 使用不正确)

A.1) 从 WPF DataGrid 复制单元格,包含带或不带前导零的文本值(例如“001”;“002”;“1”;“12345”;“ABC”;“0ABC”)

A.2) 将复制的数据粘贴到 Excel 中。预计将保留前导零,但如果可能的话,Excel 会将数值转换为数字数据格式(默认单元格数据类型为“常规”,即可完成此操作)。

<小时/>

复制错误的步骤(正确使用 Excel)

B.1) 从 WPF DataGrid 复制单元格,包含带或不带前导零的文本值(例如“001”;“002”;“1”;“12345”;“ABC”;“0ABC”)

B.2) 选择目标 Excel 文件中的所有单元格并将单元格数据类型更改为文本

B.3) 将复制的数据粘贴到 Excel 中。 预计前导零将被保留,但它们也消失了!

<小时/>

在 Excel 中查看预期结果的步骤(正确的 Excel 使用)

C.1) 将相同的数据从记事本复制到剪贴板

C.2) 选择目标 Excel 文件中的所有单元格并将单元格数据类型更改为文本

C.3) 将复制的数据粘贴到 Excel 中。预计将保留前导零,现在确实如此。我们可以看到与源数据相同。所见即所得

<小时/>

我开始研究剪贴板数据以找出 B.1 和 C.1 之间的差异(我还从 Excel 复制了相同的数据并检查了它......)。我在 Microsoft 的 C# Clipboard Viewer Sample 的帮助下发现了什么:

从 Notepad++ 复制的数据的剪贴板数据格式:

            - Text (native)

- UnicodeText (native)

- System.String (autoconvertable)

- Locale (native)

- OEMText (native)

从 WPF DataGrid 复制的数据的剪贴板数据格式:

            - HTML Format (native)

- Csv (native)

- Text (native)

- UnicodeText (native)

- System.String (autoconvertable)

从 Excel 复制的数据的剪贴板数据格式:

            - EnhancedMetafile (native)

- System.Drawing.Imaging.Metafile (autoconvertable)

- MetaFilePict (native)

- Bitmap (native)

- System.Drawing.Bitmap (autoconvertable)

- System.Windows.Media.Imaging.BitmapSource (autoconvertable)

- Biff12 (native)

- Biff8 (native)

- Biff5 (native)

- SymbolicLink (native)

- DataInterchangeFormat (native)

- XML Spreadsheet (native)

- HTML Format (native)

- Text (native)

- UnicodeText (native)

- System.String (autoconvertable)

- Csv (native)

- Hyperlink (native)

- Rich Text Format (native)

- Embed Source (native)

- Object Descriptor (native)

- Link Source (native)

- Link Source Descriptor (native)

- Link (native)

- Format129 (native)

那么解决步骤 B.3 中的问题的好\最好方法是什么?我现在想知道两个选择:

选项#1

找出如何向wpf datagrid解释,它需要以特定格式将数据设置到剪贴板中。

选项#2

第二个选项是使用我自己的函数处理 Ctrl+C,该函数将运行选定的单元格,与数据网格后面的 View 进行对话,获取正确的数据,附加到字符串生成器并将文本设置到剪贴板。

您认为上述 B.3 的最佳解决方案是什么?

最佳答案

好的。因此,既然我正在谈论从 WPF DataGrid 复制到剪贴板...我研究了 datagrid 的源代码(我应该之前就想到这个想法而不是问这个问题。)

因此,源中复制处理程序的一部分是:

        // Supported default formats: Html, Text, UnicodeText and CSV
Collection<string> formats = new Collection<string>(new string[] { DataFormats.Html, DataFormats.Text, DataFormats.UnicodeText, DataFormats.CommaSeparatedValue });

如此简单的答案是:选项#1 是不可能的(换句话说 - 剪贴板的正弦数据格式是硬编码的 - 不可能影响它)。选项#2 没问题。但现在我认为继承 datagrid 并重写方法是有意义的

        protected virtual void OnExecutedCopy(ExecutedRoutedEventArgs args)

这将为我的所有情况提供良好的解决方案。

关于WPF DataGrid复制到剪贴板: how to influence data formats in the clipboard?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23648412/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com