DataGridViewComboBoxCell 值無效,相信使用 C# 開發 Winform 程式的或多或少都遇過,網路上的許多文章,也都指出可用 DataError 事件排除掉這個錯誤提示,但事實上這只是治標不治本。換句話來說,這招只是讓程式不提示這個錯誤而已,根本的問題還是沒解決。有鑒於此,決定將自己搞定此問題的過程做個簡單的記錄:
可能原因及解決方式:
一、資料繫結時機
- 原因:下拉選單的選項資料繫結晚於 DataGridView 的資料繫結。
- 解法:先繫結下拉選項資料,再繫結 DataGridView,無論你的程式結構有多少層。
二、資料賦值時機
- 原因:下拉選單的 DataPropertyName 屬性,比 DisplayMember、ValueMember 早賦值
- 解法:調整 DataPropertyName、DisplayMember、ValueMember 賦值的順序。
三、選項資料來源
- 原因:賦予 DataGridView 下拉選單的值,不在下拉選單的選項裡。
- 解法:處理不在選項內的值,選項若有自己的資料來源,那麼就連同這個資料來源加上不在選項內的項目,全部用 Items.Add 做繫結,不要用 DataSource。
四、資料型別
- 原因:賦予 DataGridView 下拉選單的值型別,與下拉選單的值型別不一致。
- 解法:目前尚未遇到,暫不表示意見。
五、附加說明
注意!Items.Add 和 DataSource 這兩個方法不能並存,關於這個部份,可以參考微軟官方的 MSDN 說明,重點摘錄如下:
Items 或 DataSource 属性用于填充组合框的选项。
如果已将字符串添加到 Items,则无需设置 ValueMember 和 DisplayMember 属性,因为添加的每个字符串都会用于值和显示。