printmedia
asked on
Delete selected row on right click in vb.net
Hi all.
I have a datagridview control that displays records based on the code below in Visual Studio 2010. I want to be able to right click a row and when the end user selects DELETE then it deletes it from the table and the datagridview control is refreshed. As you can see, I select the QuoteNumber which is the primary key of the table, but I don't show it in the datagridview control (I don't know if this will cause an issue). I started building the ContextMenuStrip1_Click event and I get an error at the cmd.ExecuteNonQuery() line: "No mapping exists from the object type System.Windows.Form.DataGr idViewText BoxColumn to a known managed provider native type"
I have a datagridview control that displays records based on the code below in Visual Studio 2010. I want to be able to right click a row and when the end user selects DELETE then it deletes it from the table and the datagridview control is refreshed. As you can see, I select the QuoteNumber which is the primary key of the table, but I don't show it in the datagridview control (I don't know if this will cause an issue). I started building the ContextMenuStrip1_Click event and I get an error at the cmd.ExecuteNonQuery() line: "No mapping exists from the object type System.Windows.Form.DataGr
Dim con As New SqlConnection
Dim cmd As New SqlCommand
con.ConnectionString = "Data Source=myserver;Initial Catalog=mydb;Integrated Security=True"
con.Open()
cmd.Connection = con
cmd.CommandText = "SELECT IQ.QuoteNumber,IQ.MasterItemNumber, IQ.Description, IQ.SLXID, SLX.ACCOUNT,IQ.QuoteDate, IQ.UnitCost, IQ.QuotedCost, IQ.MASItemNumber, IQ.Notes FROM mydb.dbo.IQuote IQ INNER JOIN [mydb2].db2.sysdba.ACCOUNT SLX ON IQ.SLXID = SLX.ACCOUNTID WHERE MasterItemNumber = @MasterItemNo"
cmd.Parameters.AddWithValue("@MasterItemNo", txtMasterItemNo.Text)
Dim sda As New SqlDataAdapter(cmd)
Dim dt As New DataTable()
DataGridView1.DataSource = Nothing
sda.Fill(dt)
DataGridView1.ColumnCount = 3 'Set Columns Count
'Add Columns
DataGridView1.Columns(0).Name = "MasterItemNumber"
DataGridView1.Columns(0).HeaderText = "Master Item Number"
DataGridView1.Columns(0).DataPropertyName = "MasterItemNumber"
DataGridView1.Columns(0).Width = 180
DataGridView1.Columns(1).Name = "MyItemNumber"
DataGridView1.Columns(1).HeaderText = "My Item Number"
DataGridView1.Columns(1).DataPropertyName = "MyItemNumber"
DataGridView1.Columns(1).Width = 150
DataGridView1.Columns(2).Name = "Description"
DataGridView1.Columns(2).HeaderText = "Description"
DataGridView1.Columns(2).DataPropertyName = "Description"
DataGridView1.Columns(2).Width = 240
Private Sub ContextMenuStrip1_Click(sender As System.Object, e As System.EventArgs) Handles ContextMenuStrip1.Click
Dim con As New SqlConnection
Dim cmd As New SqlCommand
con.ConnectionString = "Data Source=myserver;Initial Catalog=mydb;Integrated Security=True"
con.Open()
cmd.Connection = con
cmd.CommandText = "DELETE From IQuote where QuoteNumber = @QuoteNumber"
cmd.Parameters.AddWithValue("@QuoteNumber", DataGridView1.Columns("QuoteNumber"))
cmd.ExecuteNonQuery()
con.Close()
End Sub
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
The SelectionMode was the problem. I had it set to Cell Select, I switched back to FullRowSelect and your suggested line of code works and deletes the row:
Thanks again.
cmd.Parameters.AddWithValue("@QuoteNumber", DataGridView1.SelectedRows(0).Cells("QuoteNumber").Value)
Thanks again.
Glad to help :-)
ASKER
Now I get the following error: "Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index."
At the line of code you suggested.
Could it be because when the end user right clicks it only highlights the cell that is right-clicked and not the entire row? Or could it be I'm not displaying the QuoteNumber as a column in the datagridview control?