Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataGridView选择要复制的所有单元格、行标题和列标题_C#_.net_Winforms_Datagridview - Fatal编程技术网

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"...