4

的允许您选择所有单元.SelectionModeDataGridView和行标题,或所有单元格和列标题,但我无法弄清楚如何让用户选择所有内容,包括同时选择行标题和列标题。

我想让用户能够将整个表格(包括列标题)作为文本或格式化文本(如 Word 或电子邮件)复制并粘贴到另一个文档中。它开箱即用,效果很好,但您也无法获取列标题。

4

6 回答 6

13

我能够做到这一点的唯一方法是创建一个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);
    }

希望有帮助!

于 2013-05-16T20:58:30.050 回答
8

在 Visual Studio 2013 中,winforms datagridview 具有可用于 ClipboardCopyMode 的各种枚举。要显示标题文本,用户将使用“EnableAlwaysIncludeHeaderText”枚举。 微软参考

禁用

复制到剪贴板被禁用。

EnableAlwaysIncludeHeaderText

所选单元格的文本值可以复制到剪贴板。包含选定单元格的行和列的标题文本。

EnableWithAutoHeaderText

所选单元格的文本值可以复制到剪贴板。仅当 DataGridView.SelectionMode 属性设置为 RowHeaderSelect 或 ColumnHeaderSelect 并且至少选择了一个标题时,才会为包含选定单元格的行或列包含行或列标题文本。

EnableWithoutHeaderText

所选单元格的文本值可以复制到剪贴板。不包括标题文本。

于 2015-05-20T20:50:36.243 回答
0

现在很容易。对于那些使用 VS 2017 的人,您现在可以将“ClipboardCopyMode”数据网格视图属性更改为“EnableAlwaysIncludeHeaders”,它会自动复制列标题。

于 2018-05-16T21:10:16.267 回答
0

在 XAML 中,您可以设置(在 VS2019 上验证):

<DataGrid ClipboardCopyMode="IncludeHeader"...
于 2019-04-30T12:05:35.580 回答
0

在 DataGridView 的属性中设置ClipboardCopyModeEnableAlwaysIncludeHeaderText,现在 ColumnHeaderCell 文本也被复制。

于 2019-03-06T15:07:12.147 回答
0

以下对我有用:在 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
}
于 2016-10-21T17:30:39.310 回答