Solved

ContextMenuStrip with DataGridView problem

Posted on 2008-10-05
10
505 Views
Last Modified: 2013-11-07
I am working in VN2008.  I have a DGV in a Windows Form.  I have created and bound a ContextMenuStrip object to the DGV, which appears on right-click in the DGV.

My context menu contains only one item ("Flag for action")

I want to call a SQL query and pass a parameter from the selected row in the DGV when the item is selected from the context menu.

I would normally use e.rowindex etc... but this information is not contained in the events for ToolStripMenuItem.Click.  How can I identify which row was selected when the context menu was invoked?

I can think of setting a global variable when the right-click is captured and using this but seems very messy.  There must be a proper way of doing this.

Many thanks in advance!
0
Comment
Question by:RossEdwards
  • 5
  • 5
10 Comments
 
LVL 48

Expert Comment

by:jpaulino
Comment Utility
>> I can think of setting a global variable when the right-click is captured and using this but seems very messy
Not a global but a private variable solves that
0
 
LVL 1

Author Comment

by:RossEdwards
Comment Utility
How?
0
 
LVL 48

Expert Comment

by:jpaulino
Comment Utility
You can remove the contextmenu from the properties and do this way:
 

    Private Sub DataGridView1_CellMouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseUp

        If e.Button = Windows.Forms.MouseButtons.Right Then
 

            ' Read information using e.ColumnIndex and e.RowIndex
 

            ' Display the contextmenustrip

            Dim pt As Point = DataGridView1.PointToClient(Control.MousePosition)

            Me.ContextMenuStrip1.Show(Me.DataGridView1, pt)
 

        End If

    End Sub

Open in new window

0
 
LVL 1

Author Comment

by:RossEdwards
Comment Utility
Thanks

I already have this code and it works fine.  The problem is in the next procedure, which handles ContextMenuStrip1Item1.clicked.

This separate private procedure needs to know which e.columnindex and rowindex was selected in the previous procedure.

This is my problem!
0
 
LVL 48

Expert Comment

by:jpaulino
Comment Utility
Can you show the code you have ?
0
What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

 
LVL 1

Author Comment

by:RossEdwards
Comment Utility
I just realised I dont need to call contextmenustrip1.show as it shows automatically as long as it is already bound to the DGV.  Here is my code:
 Private Sub QryListBackordersDataGridView_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles QryListBackordersDataGridView.MouseUp
 

        If e.Button = Windows.Forms.MouseButtons.Right Then

                       orderid = QryListBackordersDataGridView.Rows(e.RowIndex).Cells(0).Value.ToString

           ContextMenuStrip1.Show(QryListBackordersDataGridView, e.Location)
 

        End If

         End Sub
 

    Private Sub flagselected() Handles FlagToolStripMenuItem.Click

        ' DO SQL procedure using orderid from previous proc

   End Sub

Open in new window

0
 
LVL 48

Expert Comment

by:jpaulino
Comment Utility
But you have the information on a variable ?
Private Sub flagselected() Handles FlagToolStripMenuItem.Click
       MessageBox.Show(orderid)
End Sub
0
 
LVL 1

Author Comment

by:RossEdwards
Comment Utility
I know - orderid is a global variable.  I would rather not use it.  Hence my question - is there a better way of doing it?  
0
 
LVL 48

Accepted Solution

by:
jpaulino earned 500 total points
Comment Utility
>> orderid is a global variable
You are defining as public or as private ?
When you right click on a datagridview, the cell can be selected or not, and this way this is the better way I know. If you have the row selected you could use me.DataGridView1.CurrentRow or other property.
0
 
LVL 1

Author Closing Comment

by:RossEdwards
Comment Utility
Good Idea - I will make it selected in the first procedure and then do as you say.

Thanks for the guidance.
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
Query datatable in LINQ 6 39
AutoHotkey ActiveX Component Error 8 55
VB.Net - For Loop Error 5 23
Format column on datatable 7 14
If you're writing a .NET application to connect to an Access .mdb database and use pre-existing queries that require parameters, you've come to the right place! Let's say the pre-existing query(qryCust) in Access takes a Date as a parameter and l…
It’s quite interesting for me as I worked with Excel using vb.net for some time. Here are some topics which I know want to share with others whom this might help. First of all if you are working with Excel then you need to Download the Following …
The viewer will learn how to use NetBeans IDE 8.0 for Windows to connect to a MySQL database. Open Services Panel: Create a new connection using New Connection Wizard: Create a test database called eetutorial: Create a new test tabel called ee…
The viewer will learn how to use and create keystrokes in Netbeans IDE 8.0 for Windows.

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now