右键单击以选择 Datagridview 中的一行并显示一个菜单以将其删除
我的 DataGridView 中只有几列,而我的行中有数据。我在这里看到了一些解决方案,但我无法将它们组合起来!
只需右键单击一行,它将选择整行并显示一个菜单,其中包含删除该行的选项,当选择该选项时,它将删除该行。
我做了几次尝试,但都不起作用,而且看起来很乱。我应该怎么办?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(12)
我终于解决了这个问题:
在 Visual Studio 中,创建一个包含名为“DeleteRow”的项目的 ContextMenuStrip
然后在 DataGridView 链接 ContextMenuStrip
使用下面的代码帮助我让它工作。
这是最酷的部分
I finally solved it:
In Visual Studio, create a ContextMenuStrip with an item called "DeleteRow"
Then at the DataGridView link the ContextMenuStrip
Using the code below helped me getting it work.
Here is the cool part
为了这个问题的完整性,最好使用网格事件而不是鼠标。
首先设置数据网格属性:
SelectionMode 为 FullRowSelect
和
RowTemplate / ContextMenuStrip 到上下文菜单。
创建 CellMouseDown 事件:-
For completness of this question, better to use a Grid event rather than mouse.
First Set your datagrid properties:
SelectionMode to FullRowSelect
and
RowTemplate / ContextMenuStrip to a context menu.
Create the CellMouseDown event:-
多田:D。最简单的方法时期。对于自定义单元格只需修改一点即可。
TADA :D. The easiest way period. For custom cells just modify a little.
仅添加 mousedown 事件要容易得多:
这更容易。 初始化 mousedown 事件,如前所述:
当然,您必须在构造函数中
It's much more easier to add only the event for mousedown:
This is easier. Of cource you have to init your mousedown-event as already mentioned with:
in your constructor.
该问题的所有答案均基于鼠标单击事件。您还可以将
ContenxtMenuStrip
分配给您的DataGridview
,并检查当用户在DataGridView 上使用 RightMouseButtons 时是否选择了一行code> 并决定是否要查看
ContenxtMenuStrip
。您可以通过在ContextMenuStrip
的打开事件但是,如果您有多个上下文菜单条,每个条包含不同的选项,具体取决于在选择时,我自己也会采用鼠标点击的方法。
All the answers posed in to this question are based on a mouse click event. You can also assign a
ContenxtMenuStrip
to yourDataGridview
and check if there is a row selected when the user RightMouseButtons on theDataGridView
and decide whether you want to view theContenxtMenuStrip
or not. You can do so by setting theCancelEventArgs.Cancel
value in the the Opening event of theContextMenuStrip
But if you have several context menu strips, with each containing different options, depending on the selection, I would go for a mouse-click-approach myself as well.
基于 @Data-Base 答案,在选择模式 FullRow 之前它不会工作
,但如果您需要使其在 CellSelect 模式下工作
base on @Data-Base answer it will not work until make selection mode FullRow
but if you need to make it work in CellSelect Mode
这对我来说没有任何错误:
这
It is work for me without any errors:
And this
您还可以通过在事件代码中使用以下内容使这变得更简单:
You can also make this a little simpler by using the following inside the event code:
请参阅此处,可以使用
DataGridView
RowTemplate
属性来完成。注意:此代码未经测试,但我以前使用过此方法。
就这样,就这么简单!
See here it can be done using the
DataGridView
RowTemplate
property.Note: This code isn't tested but I've used this method before.
And there you go, as easy as that!
我有一个新的解决方法可以得到相同的结果,但是代码更少。
对于 Winforms...该示例是葡萄牙语的
一步一步跟进
现在...您已经模拟用户按下 del 键
<块引用>
<块引用>
你不会忘记在 gridview 上启用删除功能吧?!
最后...
I have a new workaround to come in same result, but, with less code.
for Winforms... That's example is in portuguese
Follow up step by step
and now... you've simulating on key press del from user
and finally...