2010-08-12 85 views
9

什麼是實現DataGridView的驗證邏輯代碼和條件格式代碼的最佳地點?CellValueChanged與CellValidating DataGridView的事件

在我閱讀過很多關於此控件的書籍和文章中,似乎表明爲此處理的適當事件是CellValidating。那麼,這個名字並不意味着這一點。

但是,這個事件經常會觸發我的口味,我不確定它是否是必需的。例如,此事件觸發每次用戶切換到另一行。

另一方面,CellValueChanged事件似乎只在單元格的值發生變化時觸發,這意味着驗證代碼只在值更改時運行,而不是每次用戶更改單元格時運行。

現在,既然有這麼多書籍使用CellValidating事件,我不知道是否沒有任何使用CellValueChanged的問題(例如顯示)?

我明白,使用簡單驗證和條件高亮規則時,性能的影響應該是無關緊要的,但我更希望它不會在用戶每次移動到另一個單元時運行無用代碼(如果可以避免的話)。

感謝,

+2

取決於您遵循的設計模式(如果有)。從技術上講,你應該從你的UI層中移除你的業務邏輯,並且有一些ValidationObject來驗證表示層中的數據,然後將結果回發給你的視圖。 – 2010-08-12 16:29:59

+0

是的,我同意如果它僅用於驗證。但是,對於條件格式化代碼,我沒有看到其他方式保留在DataGridView的相關代碼中(或者從DataGridView派生的類中將其抽象出來)。 – 2010-08-12 17:48:43

回答

4

我目前使用CellValueChanged與自定義驗證的網格,並曾與顯示器或其他任何東西沒有問題。

我使用這個事件是因爲我想觸發一定的事件順序,但只有當用戶更改單元格的值時。

我沒有注意到性能打擊的方式(測試100 - 5000行)。

我認爲最終它取決於您的驗證需求。在我的情況下,CellValueChanged已經完成了我想要/需要的。

編輯

有關CellValidating事件最重要的事情是,你可以離開細胞停止用戶,如果輸入的值未通過您的驗證。我不想這樣做。

+1

謝謝,關於CellValidating允許停止用戶離開單元的好點​​。不是我目前項目中需要的東西,但我不認爲我記得這種差異。 – 2010-08-14 08:13:32

+0

我不想阻止用戶離開單元格,如果它沒有通過驗證。你能給我一個你的CellValueChanged函數的例子嗎?現在我正在使用CellValidating,CellValidated和CellEndEdit。但我認爲你的方法是最好的。如果你能提供並舉例說明它會有很大的幫助。 – shenk 2015-06-07 00:55:57

+0

「CellValidating事件是您可以阻止用戶離開單元格」,這也會阻止用戶關閉表單。不是很好的做法,但可以在特定情況下有用。 – miki 2016-02-27 13:55:14

-1

它很簡單,在CellValidatingEvent中需要檢查一個條件是否正確。如果您的情況不正確,那麼您只需添加此代碼e.cancel。它將防止光標失去焦點