效果圖
下圖是下拉一個(gè)ListView控件,事實(shí)上,好多人不喜歡使用ListView來做行顯示的控件,因?yàn)槲覀冇袕?qiáng)大的DataGridView控件。是的,沒有,我們可以使用listView來顯示表格類的數(shù)據(jù),我們也當(dāng)然可以使用DataGridView了。
代碼分析
細(xì)心的話,你可以留意到下拉控件,其實(shí)是一個(gè)ComboBox+MultiColumn樣式,其實(shí),也有人稱呼這一控件是MultiColumnComboBox控件。你也完全可以從小作坊網(wǎng)找到相關(guān)的代碼與說明的。
而此MultiColumnComboBox控件對(duì)應(yīng)的Column,本文中稱為DataGridViewListViewColumn,如果你還不了解DataGridView***Column的自定義方法的話,可以參考
http://www.myfirm.cn/20089/20080925102315582.html
Cell中的InitializeEditingControl方法是一個(gè)重要的方法,它的工作就正如名字一樣,就是當(dāng)前的格子開始編輯時(shí)的準(zhǔn)備工作。如設(shè)置EditingControl的Text之類,這里的EditingControl就是單元格彈出的控件了。彈出的控件是DataGridViewListViewEditingControl,直接繼承了ListView控件。這樣ListView控件的大部分方法和事件都可以開發(fā)出來了。
EditingControlWantsInputKey是一個(gè)很好的方法,它可以設(shè)置當(dāng)前編輯的控件可以使用的按鍵,如上下左右鍵是DataGridView中最好用的鍵,你可以在這個(gè)方法中設(shè)置這幾個(gè)鍵交給EditingControl來處理,而不是父控件DataGridView來處理。
不過,Enter回車鍵是一個(gè)麻煩的鍵,你會(huì)發(fā)覺無論在Cell中怎樣設(shè)置都好像不能關(guān)閉它本來有的功能。
是的,初步的試驗(yàn)告訴我,只有重定義ProcessCmdKey方法,是最好的解決方案,這是一個(gè)帶Keys類型參考的方法,很好操作的。
DataGridViewListViewColumn源代碼
聯(lián)系客服