禁用对datagridview的编辑,但仍允许突出显示复制和粘贴单元格

时间:2013-12-31 17:14:25

标签: .net vb.net winforms datagridview

是否有属性(或变通方法)但不允许在datagridview中进行编辑但是还允许在单元格中突出显示文本?

目前,用户可以突出显示/复制和编辑单元格中的文本(但不会进行任何更改)。他们尝试编辑单元格中的文本,然后在未保存更改时感到困惑。我想要它,所以单元格看起来不可编辑。

我尝试设置readonly property = true,但是禁用了单元格上文本的突出显示。我希望他们能够从细胞中复制。是否有像readonly = true这样的属性仍允许突出显示单元格?


编辑 - 澄清:

文本框具有我正在寻找的效果:我有一个带有readonly = true的初始文本的文本框字段。我可以使用鼠标突出显示该文本框中的部分文本(然后复制它)。文本框的内容不可编辑。这是我想要的效果,但我想用fullrowselectmode中的datagridview来做这个。

目前我有: selectionMode = fullRowSelect(我希望能够选择整行而不是单元格)

readOnly = False

EditMode = EditOnKeystrokeOrF2

这些设置允许用户在单元格上“双击”,然后突出显示任何单元格中的文本。这是我想要的效果,但这些设置的唯一问题是用户还可以在该单元格中键入更多/删除文本。

谢谢!

5 个答案:

答案 0 :(得分:3)

您应该将DataGridView的readonly属性设置为true,然后当用户可以复制单元格时,它将无法编辑。

答案 1 :(得分:1)

您可以使用:

DataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically

这使用户选择并复制单元格但不对其进行编辑,但您的要求非常混乱 - 如果您想要复制单个单元格,则需要将selesctionmode设置为{{1}否则你将复制整行

答案 2 :(得分:0)

以下是我正在使用的内容:

  • 首先使您的所有列ReadOnly = false,因为您必须覆盖其默认行为。

  • 在列的Tag属性中输入true或false是否为只读。

  • 将网格编辑设置设为EditOnEnter

  • 然后,使用EditingControlShowing事件更改每次用户在单元格中单击时弹出的文本框属性。无论文本框是否为只读,用户都可以选择和复制内容。

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) {
    if(!(e.Control is TextBox))
        return;

    var txt = e.Control as TextBox;

    if(true.Equal(grid.CurrentCell.OwningColumn.Tag)) {
        txt.ReadOnly = true;
    }
    else {
        txt.ReadOnly = false;
    }
}

Tag不是最干净的东西,但还有很多其他方法可以存储一些自定义列属性。

答案 3 :(得分:0)

您可以将选择模式设置为RowHeaderSelect。它允许您按单元格或按行复制。

答案 4 :(得分:0)

像这样解决

Private Sub dgv_CellValidating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles dgv.CellValidating
    If dgv.IsCurrentCellDirty Then
        e.Cancel = True
        SendKeys.Send("{ESC}")
    End If
End Sub