分享

自定义DataGridView列为ListView列

 蜗牛之窝 2010-03-26
写在前面: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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多