簡體   English   中英

DataGridView選擇所有單元格,行標題和列標題進行復制

[英]DataGridView select all cells and row headers and column headers for copy

DataGridView.SelectionMode允許您選擇所有單元格和行標題,或所有單元格和列標題,但我無法弄清楚如何讓用戶同時選擇所有內容,包括行標題和列標題。

我想讓用戶能夠將整個表格(包括列標題)復制並粘貼到另一個文檔中,如文本或格式化文本,如Word或電子郵件。 它開箱即用,除了你不能得到列標題。

我能夠實現這一目標的唯一方法是通過ContextMenu控件創建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的click事件中傳遞GridView

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

希望有所幫助!

在Visual Studio 2013中,winforms datagridview具有各種可用於ClipboardCopyMode的枚舉。 要顯示標題文本,用戶將使用“EnableAlwaysIncludeHeaderText”枚舉。 微軟參考

禁用

復制到剪貼板已禁用。

EnableAlwaysIncludeHeaderText

可以將所選單元格的文本值復制到剪貼板。 包含所選單元格的行和列包含標題文本。

EnableWithAutoHeaderText

可以將所選單元格的文本值復制到剪貼板。 僅當DataGridView.SelectionMode屬性設置為RowHeaderSelect或ColumnHeaderSelect並且至少選擇了一個標頭時,才會為包含所選單元格的行或列包含行或列標題文本。

EnableWithoutHeaderText

可以將所選單元格的文本值復制到剪貼板。 標題文本不包括在內。

以下為我工作:在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
}

在DataGridView的屬性中將ClipboardCopyMode設置為EnableAlwaysIncludeHeaderText ,現在也復制ColumnHeaderCell文本。

在XAML中,您可以設置(在VS2019上驗證):

<DataGrid ClipboardCopyMode="IncludeHeader"...

現在很容易。 對於那些使用VS 2017的人,您現在可以將“ClipboardCopyMode”數據網格視圖屬性更改為“EnableAlwaysIncludeHeaders”,它將自動復制列標題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM