datagridview自动在新行上开始

时间:2012-10-27 09:44:03

标签: c# datagridview editmode newrow

我正在尝试将单元格设置为编辑模式。单元格位于新行(NewRowIndex)中。在其他地方它运行良好,但如果我尝试在NewRowIndex中设置编辑模式,它不会进入所谓的编辑模式。我只是希望用户输入一个新行(NewRowIndex),第一个单元格进入编辑模式。我试过(在RowEnter上):

dgvList.CurrentCell = dgvList["myColName", dgvList.NewRowIndex]; dgvList.BeginEdit(true);

谢谢!

1 个答案:

答案 0 :(得分:3)

我认为你真的不需要使用NewRowIndex属性。只需通过设置当前单元格开始编辑:

private void dgvList_CellEnter(object sender, DataGridViewCellEventArgs e)
{
    dgvList.CurrentCell = dgvList[e.ColumnIndex, e.RowIndex];
    dgvList.BeginEdit(true);
}

如果您希望单元格仅针对新行进入编辑模式,则:

private void dgvList_CellEnter(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex != dgvList.NewRowIndex)
        return;

    dgvList.CurrentCell = dgvList[e.ColumnIndex, e.RowIndex];
    dgvList.BeginEdit(true);
}

编辑:如果您希望新行在keydown时开始处于编辑模式,那么这是一个已经可用于datagridviews的功能。您可以像这样手动设置:

dgvList.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2;
//or
dgvList.EditMode = DataGridViewEditMode.EditOnKeystroke;

如果你想让keydown上的单元格只在新行中处于编辑模式,那么你必须通过挂钩KeyDown事件来覆盖默认行为,我认为这是一种不好的做法。可能是这样的:

初始化:dgvList.EditMode = DataGridViewEditMode.EditOnF2; //or whatever you prefer

在按键时覆盖默认的Excel样式编辑。然后

private void dgvList_KeyDown(object sender, KeyEventArgs e)
{
    if (dgvList.CurrentCell.RowIndex != dgvList.NewRowIndex)
        return;

    dgvList.BeginEdit(true);
}