是否有属性(或变通方法)但不允许在datagridview中进行编辑但是还允许在单元格中突出显示文本?
目前,用户可以突出显示/复制和编辑单元格中的文本(但不会进行任何更改)。他们尝试编辑单元格中的文本,然后在未保存更改时感到困惑。我想要它,所以单元格看起来不可编辑。
我尝试设置readonly property = true,但是禁用了单元格上文本的突出显示。我希望他们能够从细胞中复制。是否有像readonly = true这样的属性仍允许突出显示单元格?
编辑 - 澄清:
文本框具有我正在寻找的效果:我有一个带有readonly = true的初始文本的文本框字段。我可以使用鼠标突出显示该文本框中的部分文本(然后复制它)。文本框的内容不可编辑。这是我想要的效果,但我想用fullrowselectmode中的datagridview来做这个。
目前我有: selectionMode = fullRowSelect(我希望能够选择整行而不是单元格)
readOnly = False
EditMode = EditOnKeystrokeOrF2
这些设置允许用户在单元格上“双击”,然后突出显示任何单元格中的文本。这是我想要的效果,但这些设置的唯一问题是用户还可以在该单元格中键入更多/删除文本。
谢谢!
答案 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