天天看點

DevExpress gridview下拉框repositoryItemComboBox的使用

本以為devexpress gridview中的下拉框會像比原來的datatgridview中的下拉框綁定資料簡單好用,沒想到費了老大勁,查閱各種資料總算是綁定上了資料,并且能夠實作想要的效果。下面就詳細寫一下這個實作的過程,分享一下,同時也是對這個知識再次熟悉一遍。

一、綁定前準備

這一部分基本上是一些基礎的知識,但也有些地方要注意的。

1、添加下拉框列

在grid designer中,添加一列,在這列的columnedit熟悉中,可以選擇這列的編輯樣式,比如讓這列是一個按鈕或者選擇框等等,這裡我們選擇下拉框,如圖:

DevExpress gridview下拉框repositoryItemComboBox的使用

這個下拉框預設被命名為repositoryitemcombobox1,我們對這列的操作,就是對repositoryitemcombobox1的操作。

2、為gridview添加bindingsource

這裡要用bindingsource作為資料源 ,這是為了實作在repositoryitemcombobox1選擇了一個值之後,gridview能夠将它顯示,repositoryitemcombobox的很大一個缺陷就是當你選擇一個值之後,不能像傳統gridview下拉框那樣,會讓他顯示在gridview中,而且當你滑鼠點選另外一個單元格之後,就會消失,變成空白或原來的資料。是以需要用bindingsource來綁定一個datatable,當repositoryitemcombobox1選擇一個值之後,将值傳給datatable對應的列,當點選另外一個單元格或者其他地方時,bindingsource會重新整理綁定的datatable。

二、綁定資料

我在窗體加載的時候,調用了一個binddatasource()的自定義方法,這個方法是實作為repositoryitemcombobox1綁定選擇值以及為bindingsource綁定一個datatable 。binddatasource()代碼如下:

(1)在上述代碼1( 1. 為repositoryitemcombobox1綁定資料 )中, cboitementity是一個實體類,代碼如下:

(2)在代碼2( 2.為bindingsource綁定一個datatable )中,dt是一個全局變量,initdt() 是一個自定義的建立一張datatable的方法,實際工作中,可以是從資料庫中擷取一張表等,我這裡就以我建立的表為例, initdt() 代碼如下:

這裡隻需要注意最後兩列就行了,value列是用來儲存下拉框的實際值,text列是儲存下拉框的選擇值。

三、repositoryitemcombobox的處理

完成上述的内容,當我們運作程式的時候,會發現,datagridview顯示datatable中的值,下拉框有我們綁定的資料,但是當我在下拉框中選擇一個值離開後,gridview不會顯示我們選中的值,而是回到原值。我們就要想辦法讓我們選中一個值時,儲存到datatable中,這樣當我們離開後,bindingsource自然會重新整理gridview,以達到顯示選中值的效果。

(1)那麼如何實作将選中的值儲存到datatable,因為我們的bindingsource綁定的是一個全局的datatable,是以隻要擷取到選中值,很容易就能給datatable指派,到這裡容易被難住,因為我們不能像對待其他控件一樣,在他的屬性中找到他的某某事件,輕按兩下進入代碼編寫,我們找不到檢視repositoryitemcombobox1的屬性界面。那就另尋道路,利用委托,于是,我們在之前的 binddatasource() 方法中,加入一個委托方法, binddatasource() 代碼變為:

上述代碼3( 3. 下拉框 選中值改變事件 )中,comboboxedit_selectedindexchanged 的代碼如下:

(2)完成到這裡,先不要急着運作,因為當運作的時候,又會有一個新的問題,選中的值會儲存到datatable,但是gridview的單元格不答應,提示對象必須實作iconvertible:

DevExpress gridview下拉框repositoryItemComboBox的使用

解決辦法是,繼續在 binddatasource() 中添加一個委托方法解決它,binddatasource() 代碼變為:

在上述代碼4( 4 .解決iconvertible問題 )中,repositoryitemcombobox1_parseeditvalue 的代碼如下:

到這裡,就已全部完成咯,效果圖:

DevExpress gridview下拉框repositoryItemComboBox的使用
DevExpress gridview下拉框repositoryItemComboBox的使用

至于如果後續要做什麼資料處理,比如儲存到資料庫什麼的,怎麼擷取選擇的實際值顯示值什麼的,在全局的datatable中不是已經儲存好了嘛。