Datagridview:如何在编辑模式下设置单元格?

jos*_*esp 28 c# datagridview .net-3.5 winforms

我需要以编程方式以编辑方式设置单元格.我知道将该单元格设置为CurrentCell然后调用方法BeginEdit(bool),它应该发生,但在我的情况下,它不会.

我真的很想要,我的DGV有几个列,用户只能选择并编辑前两个.其他列已经是只读的,但用户可以选择它们,这就是我不想要的.

所以我在想,每当它完成在单元格上写入时告诉用户TAB,然后选择第二个单元格,然后再次选项卡并选择并开始编辑下一行的第一个单元格......

我怎样才能做到这一点?

Dav*_*all 67

设置CurrentCell然后调用BeginEdit(true)对我来说很有效.

以下代码显示了KeyDown将单元格设置为可编辑的事件的eventHandler .

我的例子只实现了一个必要的按键覆盖,但理论上其他的应该是相同的.(我总是将[0] [0]单元设置为可编辑,但任何其他单元应该可以工作)

    private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Tab && dataGridView1.CurrentCell.ColumnIndex == 1)
        {
            e.Handled = true;
            DataGridViewCell cell = dataGridView1.Rows[0].Cells[0];
            dataGridView1.CurrentCell = cell;
            dataGridView1.BeginEdit(true);               
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果您以前没有找到它,DataGridView FAQ是一个很好的资源,由DataGridView控件的程序管理器编写,它涵盖了您可能想要对控件执行的大部分操作.

  • 您可以信赖的文件:"Windows**Froms**2.0" - 常见问题文档,第1句. (3认同)
  • @KevinDeLorey 哈,从来没有注意到这一点!除了打字错误,它实际上值得一看:) (2认同)

小智 5

好吧,我会检查您的任何列是否设置为ReadOnly. 我从来没有使用过 BeginEdit,但也许有一些合法的用途。完成后dataGridView1.Columns[".."].ReadOnly = False;,未完成的字段ReadOnly应该是可编辑的。您可以使用 DataGridView事件来确定输入的CellEnter单元格,然后在将前两列的编辑传递到下一组列后打开对这些单元格的编辑,并关闭对最后两列的编辑。


小智 5

private void DgvRoomInformation_CellEnter(object sender, DataGridViewCellEventArgs e)
{
  if (DgvRoomInformation.CurrentCell.ColumnIndex == 4)  //example-'Column index=4'
  {
    DgvRoomInformation.BeginEdit(true);   
  }
}
Run Code Online (Sandbox Code Playgroud)