单击行标题选择数据网格视图行时,如何停止输入单元格

本文关键字:何停止 输入 单元格 网格 选择 标题 数据 数据网 单击 视图 | 更新日期: 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;
}