C# 当单击行标题选择datagridview行时,如何阻止输入单元格?

C# 当单击行标题选择datagridview行时,如何阻止输入单元格?,c#,datagridview,C#,Datagridview,每当用户单击行标题(选中整行(并以蓝色亮显)时,第一列中的单元格将实际输入。也就是说,如果你开始输入东西,文本就会进入这个单元格。我想阻止这一切。当选择一行或多行时,是否可能不输入datagridview单元格 我还需要解决方案,以防止在多行选择过程中由于单击和拖动行标题而输入单元格 有什么办法可以做到这一点吗 谢谢 Isaac将DataGridView的ReadOnly属性设置为true或false,具体取决于是否选择了一行或多行,或者DGV的“CellState”是否已更改 为DataGri

每当用户单击行标题(选中整行(并以蓝色亮显)时,第一列中的单元格将实际输入。也就是说,如果你开始输入东西,文本就会进入这个单元格。我想阻止这一切。当选择一行或多行时,是否可能不输入datagridview单元格

我还需要解决方案,以防止在多行选择过程中由于单击和拖动行标题而输入单元格

有什么办法可以做到这一点吗

谢谢


Isaac将DataGridView的ReadOnly属性设置为true或false,具体取决于是否选择了一行或多行,或者DGV的“CellState”是否已更改

为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;
    }
根据“jayr”的答案,我稍微调整了代码,以避免丢失单元格的只读标志

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;
}

@Jay Riggs在点击拖动过程中选中一行时,rowheadermouseclick事件是否也会触发?@IsaacB-我相信只要点击a行标题,就会触发。大约10小时后可以测试。没关系,我稍后再测试。我只是担心鼠标悬停(按下按钮)时选择多行时的行。对不起,我应该在前面的评论中更具体一些。当网格设置为全行选择时,它不起作用。这是我到目前为止发现的一个问题。这只会进一步停止执行
cellcenter
事件。它不会自动停止单元格编辑。我找不到任何有用的方法从这个事件中离开手机。例如,尝试取消编辑或更改当前单元格将不会产生预期效果。