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

问题描述

| 每当用户单击行标题(选择整个行(并将其突出显示为蓝色))时,实际上就会输入第一列中的单元格。也就是说,如果您开始输入东西,则文本将进入该单元格。我想防止这种情况。选择一行或多行时,是否可以不输入datagridview单元格? 我还需要一种解决方案,以防止在单击和拖动行标题时导致在选择多个行时输入单元格。 关于如何实现此目标的任何想法? 谢谢 以撒     

解决方法

        将您的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;
    }
    ,        基于对“ 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;
}