我在我的.NET 4.5 WinForms應用程序中有兩列DataGridView。一列是常規文本框列,另一列是DataGridViewComboBoxColumn
,它是一個下拉列表。我試圖將列綁定到我的Filter
對象的BindingList
,我希望枚舉FilterType
中的所有內容都顯示在下拉列表中。下面是我的對象和枚舉代碼:ComboBox列上的DataGridView默認錯誤
public class Filter
{
public string keyword { get; set; }
public FilterType type { get; set; }
}
public enum FilterType : int //the strings should appear in the dropdown
{
SESSION = 1,
ORDER = 2,
SHIPMENT = 3
}
我手動創建的列在VS 2012的設計師,我改變了ColumnType
,HeaderText
,並DataPropertyName
到keyword
和type
。
使用一個答案,我發現我here的這兩行代碼添加到我的窗體加載事件:
colFilterType.DataSource = Enum.GetValues(typeof(FilterType));
colFilterType.ValueType = typeof(FilterType);
當我運行代碼,我最初看到一個空白行。無論何時點擊該行,無論點擊哪個列,都會出現彈出錯誤。
System.ArgumentException:DataGridViewComboBoxCell值無效。 ...請處理DataError事件。
我可以忽略它,然後輸入我想要的任何文本放入Keyword
列,下拉奇蹟般地與枚舉的第一個值填充。但是,如果我將鼠標懸停在下拉菜單上,該錯誤又會彈出(請參閱屏幕截圖)。我不確定是什麼導致了錯誤,也不知道在哪裏設置斷點。我也不知道是否通過在設計器中創建DataGridView的某些部分並修改代碼中的部分來創建問題。設計者不允許我按照我在代碼中所做的方式設置DataSource
。它還包含我在代碼中未見過的字段ValueMember
。
雖然不是很理想,我不會介意捕捉錯誤,並用它做什麼,因爲下拉似乎填充自身(並假設所有的數據保持不變)。
這工作,並感謝您的提示!但是,每當添加新行時,新下拉列表都是空白的。然後,我需要點擊下拉列表來重點關注,再次點擊它,然後再次點擊以最終打開它。這是'DataGridView'的另一個怪癖嗎?或者你知道我能否以某種方式解決這個問題? – valsidalv
@valsidalv不客氣。新行是空白的,因爲它默認不選擇任何項目;通過強制選擇的項目成爲你想要的項目來改變這一點。 – varocarbas
我確實發現了一個問題。必須將字段'colFilterType.DataPropertyName'設置爲''type「',以便DataGridView中的更改能夠在'Filter'的綁定列表中正確更新,否則它們全部顯示爲'0'。添加此綁定會導致錯誤。 – valsidalv