在FullRowSelect模式下将datagridview单元格内容复制到剪贴板

时间:2014-02-03 12:37:43

标签: c# winforms datagridview

我有一个winform datagridview来显示客户详细信息,它有一个上下文菜单。我已将datagridview选择模式设置为“FullRowSelect”。 我想要的是我想将点击的单元格内容的内容复制到剪贴板。不是整行内容。只是细胞内容。

我在右键单击datagridview并选择行时使用以下代码显示上下文菜单。

private void dgvCusList_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
    {
        if (e.RowIndex != -1 && e.ColumnIndex != -1)
        {
            if (e.Button == MouseButtons.Right)
            {
                DataGridViewCell clickedCell = (sender as DataGridView).Rows[e.RowIndex].Cells[e.ColumnIndex];

                this.dgvCusList.CurrentCell = clickedCell;  

                var relativeMousePosition = dgvCusList.PointToClient(Cursor.Position);

                this.cnxtMnuCusResult.Show(dgvCusList, relativeMousePosition);
            }
        }
    } 

我想在单击上下文菜单中的复制菜单项时将单元格内容复制到剪贴板。 请帮我解决这个问题。 提前致谢。 :)

4 个答案:

答案 0 :(得分:7)

如果您将SelectionMode属性设为FullRowSelect,则DataGridView的复制功能将复制整行。将值更改为CellSelect。设置以下属性以仅复制单元格内容。

dataGridView1.SelectionMode = DataGridViewSelectionMode.CellSelect;
dataGridView1.MultiSelect = false;

如果您想保留FullRowSelect选择模式,请执行以下操作。

 void contextMenu_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
    {
        if (e.ClickedItem.Text == "Copy" && dataGridView1.CurrentCell.Value != null)
        {
            Clipboard.SetDataObject(dataGridView1.CurrentCell.Value.ToString(), false);
        }
    }

 void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right && e.ColumnIndex != -1 && e.RowIndex != -1)
        {
            dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].ContextMenuStrip = contextMenu;
            dataGridView1.CurrentCell = myDGV.Rows[e.RowIndex].Cells[e.ColumnIndex];
        }
    }

答案 1 :(得分:2)

在contextMenu或CellDoubleClick事件或cellMouseClick事件中,您可以执行以下操作

Clipboard.SetText(dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString());

它将复制特定单元格的内容

答案 2 :(得分:0)

Junaith的回答并不像“EditMode' = EditOnEnter;它只有在设置为EditProgrammatically时才真正起作用。然后,对于某些人来说,可以使用您自己的替换默认菜单。您可以禁用默认菜单:

(在VB中)

Private Sub DG1_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles DG1.EditingControlShowing

        DirectCast(e.Control, DataGridViewTextBoxEditingControl).ShortcutsEnabled = False
End Sub

答案 3 :(得分:0)

最简单的解决方案: 添加CellBeginEdit和CellEndEdit事件以控制ClipboardCopyMode。

{{1}}