system.argumentexception:DataGridViewcombobox cell value is not valid

i am trying to assign the value of a particular cell from the respective column in the database ...here is the code i tried.....

 For Each row As DataGridViewRow In Me.DataGridView1.Rows
           
            Dim CTRcell As DataGridViewComboBoxCell = DirectCast(row.Cells(0), DataGridViewComboBoxCell)
            CTRcell.Value = centeridandname
           
        Next

i am getting an exception system.argumentexception:DataGridViewcombobox cell value is not valid.

Please find the exception details attached.
Untitled.jpg
yuvaratnaAsked:
Who is Participating?
 
Jorge PaulinoConnect With a Mentor IT Pro/DeveloperCommented:
Humm ok, you have a datasource for the combobox!
You can still use the code I have showed you but you need to cancel the error.  On the DataError event you can clear the error this way:
(this was documented as a datagridview problem in VS2005 ... didn't knew that still exists in VS2008)

    Private Sub DataGridView1_DataError(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles DataGridView1.DataError
        If e.Context = DataGridViewDataErrorContexts.Formatting Or e.Context = DataGridViewDataErrorContexts.PreferredSize Then
            e.ThrowException = False
        End If
    End Sub

Open in new window

0
 
Jorge PaulinoIT Pro/DeveloperCommented:
Do you have the combobox in the 1st column ?
Try to change to :

For Each row As DataGridViewRow In Me.DataGridView1.Rows
        If not row.IsNewRow Then
            Dim CTRcell As DataGridViewComboBoxCell = DirectCast(row.Cells(0), DataGridViewComboBoxCell)
            CTRcell.Value = centeridandname
        End If
  Next

Open in new window

0
 
Jorge PaulinoIT Pro/DeveloperCommented:
Sorry wrong answer :(
The problem is not the new row, for that message, but the assing of the value. If you want to select one value you can do this way:

        For Each row As DataGridViewRow In Me.DataGridView1.Rows
            If Not row.IsNewRow Then
                row.Cells(0).Value = "1"
            End If
        Next
 
        ' Where "1" is the name of the item to select 

Open in new window

0
The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

 
yuvaratnaAuthor Commented:
Hi Ipaulino,I was waiting for you, Thanks for your reply, i tried the above code...but  "row.IsNewRow" is returning true....if i commented the if not row is new row line, it is returning the same exception "system.argumentexception:DataGridViewcombobox cell value is not valid."
0
 
Jorge PaulinoIT Pro/DeveloperCommented:
Check my second comment :)
I have understood wrongly your problem.
0
 
yuvaratnaAuthor Commented:
heer is the code i have

For Each row As DataGridViewRow In Me.DataGridView1.Rows
           
             
                row.Cells(0).Value =centeridandname
         
        Next

in this case it is returning the same exception....


0
 
yuvaratnaAuthor Commented:
when i tried


 For Each row As DataGridViewRow In Me.DataGridView1.Rows
            If Not row.IsNewRow Then
             
                row.Cells(0).Value = ObjTA.centeridandname
            End If
        Next


The execution is not going to the row.cell(0).value line because, the "row.isnewrow" is returning true...
0
 
Jorge PaulinoIT Pro/DeveloperCommented:
What is centeridandname variable ? You must specify a valid STRING that are in the itens of the combobox
You could try
row.Cells(0).Value =centeridandname.ToString()
0
 
Jorge PaulinoIT Pro/DeveloperCommented:
Ok, it's a new row then remove that line.
0
 
yuvaratnaAuthor Commented:
nope! that is not working out!.. it is returning the same error
0
 
Jorge PaulinoIT Pro/DeveloperCommented:
Can you show a picture of what you have ?
centeridandname is a string variable and exists in the datagridviewcombobox ?
0
 
yuvaratnaAuthor Commented:
the canterid and name is returning "0000-abc" , which exists in the combobox dataset...
0
 
yuvaratnaAuthor Commented:
k ipaulo, thanks a lot, Give a min, i l chek on this....
0
 
yuvaratnaAuthor Commented:
i have this right now

For Each row As DataGridViewRow In Me.DataGridView1.Rows
         
            row.Cells(0).Value = ObjTA.centeridandname.ToString()
           
        Next

 Private Sub DataGridView1_DataError(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles DataGridView1.DataError
        If e.Context = DataGridViewDataErrorContexts.Formatting Or e.Context = DataGridViewDataErrorContexts.PreferredSize Then
            e.ThrowException = False
        End If
    End Sub



the error message is handled....But it is looping in the datagridview1_error event ...and still not displaying the value in the selected combobox...
0
 
Jorge PaulinoIT Pro/DeveloperCommented:
Once again please CHECK if the values is available in the datasource and if the COLUMN is the index 0 (1st column)
Here's an working example if you want to try:

Public Class Form1
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 
        ' Creates a datatable
        Dim dt As New DataTable
        dt.Columns.Add("id", GetType(Integer)).AutoIncrement = True
        dt.Columns.Add("item", GetType(String))
 
        ' Adds some values
        For x As Int16 = 0 To 10
            Dim dr As DataRow = dt.NewRow
            dr("item") = "Item " & x.ToString
            dt.Rows.Add(dr)
        Next
 
        ' Create a new combo and adds it to the grid
        Dim combo As New DataGridViewComboBoxColumn
        combo.DataSource = dt.DefaultView
        combo.DisplayMember = "item"
        combo.ValueMember = "id"
 
        Me.DataGridView1.Columns.Add(combo)
 
    End Sub
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        For Each row As DataGridViewRow In Me.DataGridView1.Rows
            row.Cells(0).Value = "Item 3"
        Next
    End Sub
 
    Private Sub DataGridView1_DataError(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles DataGridView1.DataError
        If e.Context = DataGridViewDataErrorContexts.Formatting Or e.Context = DataGridViewDataErrorContexts.PreferredSize Then
            e.ThrowException = False
        End If
    End Sub
 
End Class

Open in new window

0
 
yuvaratnaAuthor Commented:
Thanks a lot ipaulino...I really hard tough time with this datagridview, Which very few of them are familiar with, U Helped me in many instances.....
0
 
Jorge PaulinoIT Pro/DeveloperCommented:
Glad I could help!
jpaulino
0
All Courses

From novice to tech pro — start learning today.