C# DataGridView选择要复制的所有单元格、行标题和列标题
C# DataGridView选择要复制的所有单元格、行标题和列标题,c#,.net,winforms,datagridview,C#,.net,Winforms,Datagridview,DataGridView的.SelectionMode允许您选择所有单元格和行标题,或所有单元格和列标题,但我不知道如何让用户同时选择所有内容,包括行标题和列标题 我想让用户能够将整个表(包括列标题)作为文本或格式化文本(如Word或电子邮件)复制并粘贴到另一个文档中。它在开箱即用的情况下工作得很好,只是您无法获取列标题。我能够实现这一点的唯一方法是在上下文菜单控件中创建ToolStripMenuItem 首先,我创建了一个方法,用于覆盖DataGridView的默认ClipboardCopyM
DataGridView
的.SelectionMode
允许您选择所有单元格和行标题,或所有单元格和列标题,但我不知道如何让用户同时选择所有内容,包括行标题和列标题
我想让用户能够将整个表(包括列标题)作为文本或格式化文本(如Word或电子邮件)复制并粘贴到另一个文档中。它在开箱即用的情况下工作得很好,只是您无法获取列标题。我能够实现这一点的唯一方法是在
上下文菜单
控件中创建ToolStripMenuItem
首先,我创建了一个方法,用于覆盖DataGridView
的默认ClipboardCopyMode
:
public void CopyToClipboardWithHeaders(DataGridView _dgv)
{
//Copy to clipboard
_dgv.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText;
DataObject dataObj = _dgv.GetClipboardContent();
if (dataObj != null)
Clipboard.SetDataObject(dataObj);
}
然后调用该方法,并在ToolStripMenuItem
的单击事件中将GridView
传递给它:
private void copyWithHeadersToolStripMenuItem_Click(Object sender, EventArgs e)
{
CopyToClipboardWithHeaders(dgv);
}
希望有帮助 在Visual Studio 2013的winforms datagridview中,ClipboardCopyMode提供了各种枚举。要显示标题文本,用户将使用“EnableAlwaysIncludeHeaderText”枚举 禁用 已禁用复制到剪贴板 启用包括标题文本在内的所有内容 选定单元格的文本值可以复制到剪贴板。行和行包含标题文本 包含选定单元格的列 使用自动标题文本启用 选定单元格的文本值可以复制到剪贴板。行或列标题文本包含在 仅当 DataGridView.SelectionMode属性设置为RowHeaderSelect或 ColumnHeader选择并至少选择一个标题 启用无标题文本 选定单元格的文本值可以复制到剪贴板。不包括标题文本 以下几点对我很有用: 在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>`
现在很容易了。对于使用VS 2017的用户,现在可以将“ClipboardCopyMode”数据网格视图属性更改为“EnableAllwaysCludeHeaders”它将自动复制列标题。在DataGridView的属性中将
ClipboardCopyMode
设置为enablelwaysIncludeHeaderText
,现在也复制了ColumnHeaderCell文本。在XAML中可以设置(在VS2019上验证):
WinForms没有使用XAMLNope…它是从2017年开始的…正如前面提到的。。。
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
}
<DataGrid ClipboardCopyMode="IncludeHeader"...