![](/img/trans.png)
[英]How to prevent datagridview from firing UserDeletingRow-event for every selected row?
[英]DataGridView UserDeletingRow Not Firing
考慮兩個DataGridViews都具有SelectionMode = RowHeaderSelect。 在grid1中,我有2列; 一個TextBox和一個CheckBox。 在grid2中,我有2列; 一個ComboBox和一個TextBox。
當我單擊RowHeader時,焦點轉到第一個單元格,而不是RowHeaderCell。 當我按下DEL按鈕時,單元格的內容將被刪除(TextBox內容被清除並且ComboBox設置為第一項)。
這樣,UserDeletingRow事件就不會觸發,因為DataGridView FAQ會說:“只有當當前單元格不在編輯模式下,AllowUserToDeleteRows屬性設置為true時,用戶才能刪除行”。
作為解決方法,我在RowHeaderMouseClick中實現了此代碼
grid.CurrentCell = grid.Rows[rowIndex].Cells[columnName];
grid.Rows[rowIndex].Selected = true;
在grid1的情況下,我傳遞CheckBox列的名稱,並在按下DEL時觸發UserDeletingRow事件。 但是,對於grid2傳遞ComboBox列的名稱不會觸發該事件。
我嘗試了以下方法:
1-選擇RowHeaderCell->異常,因為無法選擇它。
2- grid.EndEdit()->沒有效果。
3-將SelectionMode更改為FullRowSelect,然后返回RowHeaderSelect->單元格設置為編輯模式。
我的問題:
無論網格的列如何,我都需要觸發UserDeletingRow? 或者,如果可能的話,選擇HeaderCell的解決方法?
編輯(問題的簡短形式):
單擊RowHeader會選擇該行並將第一個單元格置於編輯模式(如果適用),通過這種方式單擊DEL按鈕將刪除該單元格內容,並且不會觸發UserDeletingRow事件。 解決方法是,選擇一個不能置於編輯模式的單元格(如可用),例如CheckBoxColumn。
這是單擊RowHeader的默認行為嗎? 如果是,您可以告訴我解決方法嗎? 如果否,您能指出我這種現象的原因嗎?
編輯2:
我發現將EditMode設置為EditOnEnter會使單擊RowHeader將第一個單元格置於編輯模式。 我將嘗試克服這一問題,但會有所幫助。
可惜我還不能發表評論(因為代表的東西等等!)而且您不清楚您想做什么。
單擊該行的RowHeader會導致選中整行,然后按Del按鈕刪除該行並觸發該事件!
如果要刪除行而不選擇行標題,請考慮使用“全行選擇”而不是“行標題選擇”。
我在http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/cab3c9eb-4c86-475e-8cbd-dee6b235765a中找到了答案。 一種解決方法是在單擊RowHeader時將EditMode更改為EditOnEnter之外的其他模式,然后再將其更改回EditOnEnter。
我要感謝@ M2X,因為他的評論很有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.