如何在C#中更改DataGridViewComboBoxColumn的行为?

时间:2011-02-17 20:43:00

标签: c# winforms

我正在使用包含组合框列的数据网格,但编辑此组合框(通过简单地单击它)有时会变得烦人,因为必须至少点击两次才能更改该字段的值。我想改变那种行为,所以我认为这很简单:只需创建一个OnMouseOver事件来选择鼠标组合框,但唯一可用的事件是Disposed one。

有没有办法改变这种行为?

4 个答案:

答案 0 :(得分:2)

我刚刚处理了同样的问题,并通过将DataGridView.EditMode设置为EditOnEnter来解决此问题。

如果您不喜欢所有其他列的该行为,我发现this suggestion已放入CellEnter事件:

if (DataGridView1.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn)
{
    ((DataGridViewComboBoxEditingControl)DataGridView1.EditingControl).DroppedDown = true;
}

我没有尝试过,但看起来很有希望。在this question上讨论了相同的技术。

答案 1 :(得分:0)

在Winforms中,DataGridView上有一个CellMouseEnter事件(以及一个用于非鼠标导航的CellEnter事件)。您可以使用它来设置所选单元格。

答案 2 :(得分:0)

你只获得Disposed事件的原因(我认为)是因为你试图走得太深。当我尝试一直到dataGridView1.Columns [“Column1”]时,我只得到Disposed事件......

相反,正如KeithS所提到的,您可以将CellMouseEnter事件分配给DataGridView。

从那里,您可以执行以下操作...

private void dataGridView1_CellMouseEnter(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex==0 || e.ColumnIndex==2)
    {
        dataGridView1.CurrentCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
        dataGridView1.BeginEdit(true);
    }
}

if-statement就是为了展示如何将此功能限制到某些列,以防您需要。

if语句中的第一行设置当前单元格,第二行开始编辑过程。

这是一个通用的过程,可以使用任何类型的列,可以放入DataGridView。 DataGridView的EditMode无关紧要。

答案 3 :(得分:0)

这非常好用。 在datagridview的CellClick事件:

void datagridview1_CellClick(object sender, .Windows.Forms.DataGridViewCellEventArgs e){if (e.ColumnIndex > 0)
        {
            W1.dGVReports.CurrentCell = W1.dGVReports.Rows[e.RowIndex].Cells[e.ColumnIndex];
            W1.dGVReports.BeginEdit(true);
            (W1.dGVReports.EditingControl as System.Windows.Forms.DataGridViewComboBoxEditingControl).DroppedDown = true;
        }
    }