写在前面:DataGridView是一个强大的控件,它的每一列都可以是一个控件,如DataGridViewTextBox,DataGridViewComboBoxColumn,DataGridViewCheckboxColumn,这些Column的命名,就是代表这一列是从控件变过来。从名字出发,我们可以想像,也许会有DataGridViewDateTimePickerColumn,DataGridViewDataGridViewColumn之类的控件,也是可以从控件中想像出一些意思出来。下面介绍一下DataGridViewListColumn,这是多列选定的解决方案,下拉多列的意义在于同时设置多个单元格的数据,一般情况下都要编写一些代码的。
效果图 下图是下拉一个ListView控件,事实上,好多人不喜欢使用ListView来做行显示的控件,因为我们有强大的DataGridView控件。是的,没有,我们可以使用listView来显示表格类的数据,我们也当然可以使用DataGridView了。
代码分析 细心的话,你可以留意到下拉控件,其实是一个ComboBox+MultiColumn样式,其实,也有人称呼这一控件是MultiColumnComboBox控件。你也完全可以从小作坊网找到相关的代码与说明的。 而此MultiColumnComboBox控件对应的Column,本文中称为DataGridViewListViewColumn,如果你还不了解DataGridView***Column的自定义方法的话,可以参考 http://www./20089/20080925102315582.html Cell中的InitializeEditingControl方法是一个重要的方法,它的工作就正如名字一样,就是当前的格子开始编辑时的准备工作。如设置EditingControl的Text之类,这里的EditingControl就是单元格弹出的控件了。弹出的控件是DataGridViewListViewEditingControl,直接继承了ListView控件。这样ListView控件的大部分方法和事件都可以开发出来了。 EditingControlWantsInputKey是一个很好的方法,它可以设置当前编辑的控件可以使用的按键,如上下左右键是DataGridView中最好用的键,你可以在这个方法中设置这几个键交给EditingControl来处理,而不是父控件DataGridView来处理。 不过,Enter回车键是一个麻烦的键,你会发觉无论在Cell中怎样设置都好像不能关闭它本来有的功能。 是的,初步的试验告诉我,只有重定义ProcessCmdKey方法,是最好的解决方案,这是一个带Keys类型参考的方法,很好操作的。
DataGridViewListViewColumn源代码
出处:小作坊网Chakman
|