2012-10-27 30 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