当行标题单击选中datagridview行时,如何停止输入单元格?

时间:2011-05-31 01:35:11

标签: c# datagridview

每当用户单击选择整行(并将其突出显示为蓝色)的行标题时,实际上会输入第一列中的单元格。也就是说,如果您开始输入内容,则文本将进入该单元格。我想阻止这个。当选择一行或多行时,是否可以不输入datagridview单元格?

我还需要一种解决方案,以防止在行标题上单击并拖动导致多行选择时输入单元格。

关于如何实现这一目标的任何想法?

由于

艾萨克

3 个答案:

答案 0 :(得分:2)

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

这在我的测试中对我有用,但如果有隐藏的'陷阱',我不会感到惊讶。

答案 1 :(得分:0)

另一种解决方案可能是这样的:

    private void dataGrid_CellEnter(object sender, DataGridViewCellEventArgs e)
    {
        if (e.ColumnIndex == 0 && dataGrid.Rows[e.RowIndex].Selected)
            return;
    }

答案 2 :(得分:0)

基于" 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;
}