關於DataGridViewComboBoxColumn的二三事

近日開發一個基於WinForm的工具,用到了DataGridViewComboBoxColumn。工具

 

關於數據:.net

  1. DataGridView的數據源是代碼生成的DataTable
  2. DataGridViewComboBoxColumn的數據源是一個List<>,內容類型是自創的Text-Value類
  3. Value類型是Object,實際使用時存儲的值是KeyValuePair<string,string>

 

問題出現:orm

考慮到使用時,用戶會對特定項設置空值,因而在列表中加入了一個{Text = string.Empty, Value = null}的項目。blog

 

但Debug時設空值報錯,彈出提示稱:「System.ArgumentException: 不能將 Column "XXX" 設置爲null。請改用DBNull。……要替換此默認對話框,請處理 DataError 事件。」事件

因而按要求把Value改爲了DBNull.Value,再運行……開發

問題依舊!字符串

 

搜索關鍵詞,找到如下內容:get

http://blog.csdn.net/cnjack/article/details/4561376string

大意是添加DataGridView.DataError事件的處理,並讓處理爲空,以此屏蔽這個錯誤。io

再運行,再也不報錯,但空值也不能正確寫入數據源。看來這個方法在這裏只是治標不治本。

 

試圖在DataError事件處理中加入對空值的處理,無果。

 

在反覆的嘗試中,最終找的解決方法:

把Text設爲非空字符串(不能爲null或string.Empty)

原理不明……

 

其餘注意事項:

  1. 在給DataGridView設置數據源以前,必定要先給DataGridViewComboBoxColumn設置數據源。
  2. 給DataGridViewComboBoxCell設置值時,確認該值已存在於對應DataGridViewComboBoxColumn的數據源中。
相關文章
相關標籤/搜索