的允许您选择所有单元.SelectionMode
格DataGridView
和行标题,或所有单元格和列标题,但我无法弄清楚如何让用户选择所有内容,包括同时选择行标题和列标题。
我想让用户能够将整个表格(包括列标题)作为文本或格式化文本(如 Word 或电子邮件)复制并粘贴到另一个文档中。它开箱即用,效果很好,但您也无法获取列标题。
的允许您选择所有单元.SelectionMode
格DataGridView
和行标题,或所有单元格和列标题,但我无法弄清楚如何让用户选择所有内容,包括同时选择行标题和列标题。
我想让用户能够将整个表格(包括列标题)作为文本或格式化文本(如 Word 或电子邮件)复制并粘贴到另一个文档中。它开箱即用,效果很好,但您也无法获取列标题。
我能够做到这一点的唯一方法是创建一个ToolStripMenuItem
带有控件的ContextMenu
控件。
首先,我创建了一个覆盖默认值ClipboardCopyMode
的方法DataGridView
:
public void CopyToClipboardWithHeaders(DataGridView _dgv)
{
//Copy to clipboard
_dgv.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText;
DataObject dataObj = _dgv.GetClipboardContent();
if (dataObj != null)
Clipboard.SetDataObject(dataObj);
}
然后我调用该方法并GridView
在 click 事件中传递它ToolStripMenuItem
:
private void copyWithHeadersToolStripMenuItem_Click(Object sender, EventArgs e)
{
CopyToClipboardWithHeaders(dgv);
}
希望有帮助!
在 Visual Studio 2013 中,winforms datagridview 具有可用于 ClipboardCopyMode 的各种枚举。要显示标题文本,用户将使用“EnableAlwaysIncludeHeaderText”枚举。 微软参考
禁用
复制到剪贴板被禁用。
EnableAlwaysIncludeHeaderText
所选单元格的文本值可以复制到剪贴板。包含选定单元格的行和列的标题文本。
EnableWithAutoHeaderText
所选单元格的文本值可以复制到剪贴板。仅当 DataGridView.SelectionMode 属性设置为 RowHeaderSelect 或 ColumnHeaderSelect 并且至少选择了一个标题时,才会为包含选定单元格的行或列包含行或列标题文本。
EnableWithoutHeaderText
所选单元格的文本值可以复制到剪贴板。不包括标题文本。
现在很容易。对于那些使用 VS 2017 的人,您现在可以将“ClipboardCopyMode”数据网格视图属性更改为“EnableAlwaysIncludeHeaders”,它会自动复制列标题。
在 XAML 中,您可以设置(在 VS2019 上验证):
<DataGrid ClipboardCopyMode="IncludeHeader"...
在 DataGridView 的属性中设置ClipboardCopyMode
为EnableAlwaysIncludeHeaderText
,现在 ColumnHeaderCell 文本也被复制。
以下对我有用:在 xaml 页面中:
<DataGrid
Name="myGridName"
... >
<DataGrid.Columns>
....
</DataGrid.Columns>
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="Copy with Headers" Click="Copy_Data_with_header">
</MenuItem>
</ContextMenu>
</DataGrid.ContextMenu>`
在 xaml.cs 中定义Copy_Data_with_header
如下:
private void Copy_Data_with_header(object sender, RoutedEventArgs e)
{
DataGrid grd = this.myGridName;
grd.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
ApplicationCommands.Copy.Execute(null, grd);
grd.ClipboardCopyMode = DataGridClipboardCopyMode.ExcludeHeader;
//so that you can copy individual cell if you like or right click on grid and copy with headers
}