单击行标题选择数据网格视图行时,如何停止输入单元格
本文关键字:何停止 输入 单元格 网格 选择 标题 数据 数据网 单击 视图 | 更新日期: 2023-09-27 17:58:04
每当用户单击行标题时,就会选择整行(并将其高亮显示为蓝色),实际输入第一列中的单元格。也就是说,如果你开始打字,文本就会进入那个单元格。我想防止这种情况发生。当选择一行或多行时,是否可以不输入数据网格视图单元格?
我还需要一种解决方案,以防止在单击和拖动行标题导致的多行选择过程中输入单元格。
关于我该如何做到这一点,有什么想法吗?
感谢
Isaac
根据是否选择了一行或多行或DGV的"CellState"是否已更改,将DataGridView的ReadOnly属性设置为true或false。
为DataGridView添加以下两个事件:
private void dataGridView1_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e) {
if (e.StateChanged == DataGridViewElementStates.Selected) {
Console.WriteLine("TRUE");
dataGridView1.ReadOnly = true;
}
}
private void dataGridView1_CellStateChanged(object sender, DataGridViewCellStateChangedEventArgs e) {
if (e.StateChanged == DataGridViewElementStates.Selected) {
Console.WriteLine("false");
dataGridView1.ReadOnly = false;
}
}
这对我的测试很有效,但如果有隐藏的"陷阱",我不会感到惊讶
替代解决方案可能是这样的:
private void dataGrid_CellEnter(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0 && dataGrid.Rows[e.RowIndex].Selected)
return;
}
根据"Jay R"的答案,我对代码进行了一点调整,使其不会丢失单元格的只读标志。
private void dataGridView1_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
{
if (e.StateChanged == DataGridViewElementStates.Selected)
e.Row.DataGridView.EditMode = DataGridViewEditMode.EditProgrammatically;
}
private void dataGridView1_CellStateChanged(object sender, DataGridViewCellStateChangedEventArgs e)
{
if (e.StateChanged == DataGridViewElementStates.Selected)
// adjust the edit mode to your "default" edit mode if you have to
e.Cell.DataGridView.EditMode = DataGridViewEditMode.EditOnEnter;
}