2013-05-16 66 views
1

.SelectionMode可让您选择所有单元格和行标题,或所有单元格和列标题,但我无法弄清楚如何让用户选择所有内容,包括同时显示行标题和列标题。DataGridView选择复制的所有单元格和行标题和列标题

我想给用户整个表(包括列标题)复制并粘贴到另一个文档文本或格式的文本,如Word或电子邮件的功能。它可以很好地工作,除非你不能获得列标题。

回答

5

我一直能够实现这一目标的唯一方法是通过创建一个ToolStripMenuItem控制ContextMenu控制。

首先我创建了覆盖默认ClipboardCopyModeDataGridView的方法:

public void CopyToClipboardWithHeaders(DataGridView _dgv) 
    { 
     //Copy to clipboard 
     _dgv.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText; 
     DataObject dataObj = _dgv.GetClipboardContent(); 
     if (dataObj != null) 
      Clipboard.SetDataObject(dataObj); 
    } 

然后我调用该方法,并将它传递的GridViewToolStripMenuItem的单击事件:

private void copyWithHeadersToolStripMenuItem_Click(Object sender, EventArgs e) 
    { 
     CopyToClipboardWithHeaders(dgv); 
    } 

希望有所帮助!

2

在Visual Studio 2013年代的WinForms DataGridView中有可用于各种ClipboardCopyMode枚举。为了显示标题文本,用户将使用“EnableAlwaysIncludeHeaderText”枚举。 Microsoft Reference

禁用

复制到剪贴板被禁用。

EnableAlwaysIncludeHeaderText

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

EnableWithAutoHeaderText

所选单元格的文本值可以被复制到剪贴板。行或列标题文本包括用于 行或只包含当 DataGridView.SelectionMode属性设置为RowHeaderSelect或 ColumnHeaderSelect并且选择至少一个报头选择的细胞的列。

EnableWithoutHeaderText

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

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定义Copy_Data_with_header。cs是这样的:

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 
} 
+0

WinForms不使用XAML – LarsTech

相关问题