2012-10-27 48 views
2

我想设置一个单元格编辑模式。单元格在新行(NewRowIndex)中。其他地方它运作良好,但如果我尝试在NewRowIndex中设置编辑模式,它不会按照假设进入编辑模式。我只是想让用户输入一个新行(NewRowIndex),第一个单元格进入编辑模式。我试过(上RowEnter):datagridview开始自动在新行

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

谢谢!

+0

为什么你首先处理newrowindex?只要将新行视为正常行并正在编辑 – nawfal

+0

将新行视为正常行意味着什么?我正在处理newrowindex,因为只有当用户输入新行时,编辑模式才会被触发。你可能会发布一些代码来显示你的意思。谢谢! (ps。就像在Excel中一样 - 如果按Enter键,光标跳到下一行,并且如果您开始写入单元格进入编辑模式) – FreewareFire

+0

我已经发布了代码,请参阅我的第二个代码块。在excel中,如果按下输入游标只跳转到下一行,它不会使单元处于编辑模式。只有当你开始输入时才会变成编辑模式。所以你不需要使用dgv输入事件.. – nawfal

回答

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处于编辑模式时,那么这是一个已经可用于datagridview的功能。您可以手动设置它像这样:

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

如果你想在KEYDOWN仅适用于新行的单元格是在编辑模式下,那么你将不得不覆盖默认行为,通过挂钩KeyDown事件,我相信在做图形用户界面时是一种不好的方法可能是这样的:

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

覆盖默认擅长于按键风格编辑。然后

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

    dgvList.BeginEdit(true); 
} 
+0

地狱是的!非常感谢你!有时候最简单的解决方案很好。我从来没有想过这次CellEnter活动! – FreewareFire

+0

@FreewareFire我没有注意到你在使用RowEnter。 CellEnter是正确的事件。 – nawfal

+0

是的,认为这是主要问题,因为它在CellEnter上的作用,对RowEnter没有:) 谢谢! – FreewareFire