示例下载地址:http://download.youkuaiyun.com/source/950756
本组件演示如何实现DataGridView列标题的编辑。
使用效果如下,双击列标题即可编辑,失去焦点则恢复原始状态,可响应键盘方向键操作。

实现原理分析如下:
1、在组件中包含一个文本框,添加到界面上时设置为隐藏。
2、双击DataGridView控件的列标题时,获取列标题的坐标信息。
3、根据获取的坐标信息改变文本框的大小和位置,显示文本框以覆盖掉列标题,并在文本框中显示列标题文本。
4、文本框失去焦点后将文本框中的文本设置为正在编辑的列标题的文本。
5、根据按键进行更灵活的操作,比如左右移动编辑和确认输入
实现要点:
1、在DataGridView的ColumnHeaderMouseDoubleClick事件中实现编辑操作
2、计算坐标时需要考虑滚动条,滚动条滚动时需要同步移动文本框
3、用键盘移动编辑时需要考虑隐藏列不可编辑
类图如下:

组件有两个属性
EnableEdit(bool):是否允许编辑列标题
TargetControl(DataGridView):要编辑的目标DataGridView控件
实现了ISupportInitialize接口,在接口方法EndInit中实现组件的初始化和绑定目标控件的事件处理方法。
- public void EndInit()
- {
- if (m_TargetControl != null)
- {
- this.m_TargetControl.Parent.Controls.Add(this.rtbTitle);
- this.rtbTitle.BringToFront();
- this.ReloadSortedColumnList();
- m_TargetControl.ColumnHeaderMouseDoubleClick += new DataGridViewCellMouseEventHandler(TargetControl_ColumnHeaderMouseDoubleClick);
- m_TargetControl.ColumnDisplayIndexChanged += new DataGridViewColumnEventHandler(TargetControl_ColumnDisplayIndexChanged);
- m_TargetControl.ColumnRemoved += new DataGridViewColumnEventHandler(TargetControl_ColumnRemoved);
- m_TargetControl.ColumnAdded += new DataGridViewColumnEventHandler(TargetControl_ColumnAdded);
- m_TargetControl.Scroll += new ScrollEventHandler(TargetControl_Scroll);
- }
- }
目标控件的事件处理如下,主要处理列标题的鼠标双击事件、列信息的变动以及滚动条操作。
- void TargetControl_Scroll(object sender, ScrollEventArgs e)
- {
- if (e.ScrollOrientation == ScrollOrientation.HorizontalScroll)
- this.m_ScrollValue = e.NewValue;
- if (this.rtbTitle.Visible)
- this.ShowHeaderEdit();
- }
- void TargetControl_ColumnAdded(object sender, DataGridViewColumnEventArgs e)
- {
- this.ReloadSortedColumnList();
- }
- void TargetControl_ColumnRemoved(object sender, DataGridViewColumnEventArgs e

该博客介绍了一个组件,用于实现DataGridView列标题的编辑功能。当双击列标题时,会弹出一个文本框覆盖列标题,允许用户编辑。文本框失去焦点或按回车键后,更改会保存。此外,组件考虑了滚动条的影响和键盘操作,如左右移动编辑。通过处理各种事件,如ColumnHeaderMouseDoubleClick、ColumnDisplayIndexChanged和Scroll,实现了这一功能。博客提供了详细实现步骤和关键代码示例。
最低0.47元/天 解锁文章
1396

被折叠的 条评论
为什么被折叠?



