DataGridView 資料行下拉選單,資料繫結階段顯示 DataGridViewComboBoxCell 值無效

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 属性,因为添加的每个字符串都会用于值和显示。