DataGridView中右键弹出编辑修改等菜单.doc
上传人:sy****28 上传时间:2024-09-14 格式:DOC 页数:4 大小:29KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

DataGridView中右键弹出编辑修改等菜单.doc

DataGridView中右键弹出编辑修改等菜单.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

在界面上放一个ContextMenuStrip1设置DataGridView的ContextMenuStrip属性为你添加的Menu,添加MenuStrip的选项,在MenuStrip选项单击事件里写你需要的操作。删除行就是dgViewCustom.Rows.Remove(drow);添加:Data'GridView设为可编辑就可以了方案一:用contextMenuStrip控件,添加编辑修改右键菜单,然后右键单击菜单弹出编辑修改窗体,把dataGridView的数据上传到窗体,在进行修改方案二:或者不用右键菜单,在dataGridView上直接修改数据也是可以的详细分析:在winfrom编程中我们经常使用表格控件DataGridView的行关联快捷菜单(也称为上下文弹出菜单)ContextMenuStrip,基本步骤如下:在窗体上设计ContextMenuStrip快捷菜单控件;设置DataGridView.RowTemplate.ContextMenuStrip属性为指定的快捷菜单;在菜单弹出前捕获关联事件DataGridView.RowContextMenuStripNeeded,获得当前行与快捷菜单,并做适当处理。但是,使用其关联事件DataGridView.RowContextMenuStripNeeded有一个重要的前提:“RowContextMenuStripNeeded事件仅在设置了DataGridView控件的DataSource属性或者该控件的VirtualMode属性为true时发生。”(参考MSDN:RowContextMenuStripNeeded事件)。此外,上述方法还有一个不足之处:在非数据行的地方(如:表格列头或行头)不能使用RowTemplate.ContextMenuStrip快捷菜单,也捕获不到事件DataGridView.RowContextMenuStripNeeded事件。事实上,DataGridView.ContextMenuStrip是控件本身的快捷菜单。本文介绍的定制DataGridView控件,就是直接应用其ContextMenuStrip属性,定制一个快捷菜单关联事件,实现RowTemplate.ContextMenuStrip类似功能。基本思路如下:重写DataGridView.MouseDown(MouseEventArgse)方法,捕获鼠标右击事件;根据事件参数MouseEventArgs的鼠标位置,计算DataGridView当前位置的行号与列号;定制关联事件ContextMenuStripMenu,在快捷菜单弹出前获取行号、列号与快捷菜单对象对象。关键技术捕获鼠标右击位置(坐标),根据该位置计算当前行号与列号,并引发自定义关联事件。如下代码是捕获鼠标右击事件(定制DataGridView控件中的代码):protectedoverridevoidOnMouseDown(MouseEventArgse){base.OnMouseDown(e);if(e.Button==MouseButtons.Right){if(this.ContextMenuStrip!=null&&this.ContextMenuStripNeeded!=null){introwIndex=this.GetRowIndexAt(e.Location);//计算行号intcolIndex=this.GetColIndexAt(e.Location);//计算列号ContextMenuStripNeededEventArgsee;//事件参数ee=newContextMenuStripNeededEventArgs(this.ContextMenuStrip,rowIndex,colIndex);this.OnContextMenuStripNeeded(ee);//引发自定义事件,执行事件方法}}}只有在ContextMenuStrip属性对象非空,以及定制关联事件ContextMenuStripNeeded非空(即有事件注册者)时,才需要计算行列坐标,并由OnContextMenuStripNeeded引发调用事件处理方法。当前鼠标位置的行/列编号计算方法如下:privateintGetColIndexAt(PointmouseLocation){intcolIndex=-1;intcolOffset=0;intgridWidth=1;intpadding=1;if(this.RowHeadersVisible){colOffset+=this.RowHeadersWidth;padding=0;}if(colOffset+padding<mouseLocation.X)//超