2012-09-21 41 views
0

我有一個DataGridView,我需要運行CellValidating事件以確保只從ComboBox中選擇有效值。這是必需的,因爲ComboBox包含用於顯示類別的虛擬行,並且用戶可以在每個類別下列出的字段選擇。DataGridView行正在驗證中被清除

雖然我的驗證代碼工作正常,但有一個不受歡迎的副作用是所有值都從正在驗證的行中擦除。我已經剝離的事件處理程序代碼到這一點,這個問題仍然存在:

private void dgvInformation_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 
{ 
    DataGridView dgv = this.dgvInformation;  
    DataGridViewCell cell = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex]; 
} 

如果我刪除

DataGridViewCell cell = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex]; 

線則不會出現這個問題。

DGV不受約束,我認爲這是導致問題的原因。作爲一個測試,我做了一個簡單的表單並填充了DGV值,並且每次CellValidating事件觸發該行被刪除,但是當我創建一個List並將其用作DataSource時,值不會被清除。這可能是未綁定DGV的錯誤嗎?

非常感謝

回答

0

我與sentense問題:「以確保只有合法的值從ComboBox選擇。」實際上,使用組合框應該可以防止在文本框等控件中出現錯誤的值,爲什麼不在組合框中顯示有效值,或者是否在所有的組合框都已經生效之後驗證是否需要驗證組合框的組合,因此您可能需要一些東西就像一個提交按鈕來運行驗證程序。

如果您仍然認爲您必須在每次選擇後驗證組合框,那麼您需要在組合框的SelectionChanged事件上以某種方式運行驗證。

+0

需要進行驗證的原因是ComboBox顯示類別名稱,其值爲-1,並且在每個類別下列出了其數據庫ID作爲值的字段。如果值爲-1,則使用驗證事件將事件參數的取消屬性設置爲true – CrazyHorse