error system.argumentexception: datagridviewcomboboxCell value not Valid
I have a DGV(unbound) with many Columns and one of the Column is ComboBoxColumn. I want to add Items in it whenever user enters in the First column. This I am able to do on CellValueChange Event . i.e. if Cell Value of Index 1 changes then 3related Items (say A,B &C) are added to combo of Comboboxcolumn and item at 0 Index (A) is set as default selection, and before adding these items I am clearing the Combobox.
Please note that Items to be added in combo may be different in different rows, e.g. maybe in 2nd Row Combo 3related Items may be say A,D &F.
After adding some data , if User want to EDIT the selection done in Combobox in any row then user will directly enter in that Combobox column. So to take care of it I am taking help of CellBeginEdit Event to Load the 3 Items related to Column1 Item of that Particular Row. Loading is successful.
Now issue comes if user changes the selection in combobox by directly entering in the combobox Column, it gives error
“system.argumentexception: datagridviewcomboboxCell value not Valid”
My Best guess is it due to different Itemset of combo in different rows.
What may be the solution, any suggestions?
Code:
Public Class Test2
Dim CBItmUnit As New DataGridViewComboBoxColumn
Const ClmnCntDGV2 As Integer = 5
Dim UnitArrayList As New ArrayList
Dim V_SalesVoucher As New DataTable
Private Sub Test2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
With V_SalesVoucher.Columns
.Add("1", GetType(Integer))
.Add("2", GetType(String))
.Add("3", GetType(Integer))
.Add("4", GetType(String))
.Add("5", GetType(Integer))
End With
With V_SalesVoucher.Rows
.Add(1, "Itm1", 10, "Box", 100)
.Add(2, "Itm2", 20, "Box", 110)
End With
With DGVItemDetail
Try
' Set AutoGenerateColumns False
.AutoGenerateColumns = False
' Set Visible Columns Count
.ColumnCount = ClmnCntDGV2
' Add Columns
.DataSource = V_SalesVoucher
' // Set Column Header Text and Width
.RowHeadersVisible = True
.Columns(0).HeaderText = "S.No." : .Columns(0).Width = 70 : .Columns(0).ReadOnly = True : .Columns(0).DataPropertyName = "1"
.Columns(1).HeaderText = "Item" : .Columns(1).AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill : .Columns(1).DataPropertyName = "2" '
.Columns(2).HeaderText = "Qty" : .Columns(2).Width = 90 : .Columns(2).DataPropertyName = "3"
.Columns(3).HeaderText = "List Price" : .Columns(3).Width = 100 : .Columns(3).DataPropertyName = "4"
.Columns(4).HeaderText = "Unit" : .Columns(4).Width = 100 : .Columns(4).Visible = False : .Columns(4).DataPropertyName = "5"
.Columns.Insert(5, CBItmUnit)
CBItmUnitSetting()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
.ReadOnly = False
End With
End Sub
Private Sub CBItmUnitSetting()
With CBItmUnit
.Name = "CBItmUnit"
.DisplayStyle = System.Windows.Forms.DataGridViewComboBoxDisplayStyle.ComboBox
.DisplayStyleForCurrentCellOnly = True
.DataSource = UnitArrayList
.HeaderText = "Unit"
.Width = 90
End With
For n As Integer = 0 To DGVItemDetail.Rows.Count - 1
If DGVItemDetail(4, n).Value IsNot Nothing Then
UnitArrayList.Add(DGVItemDetail(4, n).Value)
DGVItemDetail(5, n).Value = DGVItemDetail(4, n).Value
End If
Next
End Sub
Private Sub DGVItemDetail_CellBeginEdit(sender As Object, e As DataGridViewCellCancelEventArgs) Handles DGVItemDetail.CellBeginEdit
If DGVItemDetail.CurrentCell.ColumnIndex = 5 Then
Dim nrow As Integer = DGVItemDetail.CurrentCell.RowIndex
If nrow = 0 Then 'Findrows.Count > 0 Then
UnitArrayList.Clear()
UnitArrayList.Add("Box") '(Findrows(0)("sItmMainUnit").ToString)
UnitArrayList.Add("Pc") '(Findrows(0)("sItmAltUnit").ToString)
UnitArrayList.Add("Case") '(Findrows(0)("sItmPackUnit").ToString)
CBItmUnit.DataSource = UnitArrayList
SendKeys.Send("{F4}")
ElseIf nrow = 1 Then
UnitArrayList.Clear()
UnitArrayList.Add("Box") '(Findrows(0)("sItmMainUnit").ToString)
UnitArrayList.Add("Pack") '(Findrows(0)("sItmAltUnit").ToString)
UnitArrayList.Add("XXX") '(Findrows(0)("sItmPackUnit").ToString)
CBItmUnit.DataSource = UnitArrayList
SendKeys.Send("{F4}")
End If
End If
End Sub
End Class
Re: error system.argumentexception: datagridviewcomboboxCell value not Valid
Could you post a demo showing the problem?
Re: error system.argumentexception: datagridviewcomboboxCell value not Valid
Quote:
Originally Posted by
Peter Swinkels
Could you post a demo showing the problem?
Hi Peter, I have added a sample of Code, which if you run by adding attached Database, you can see the issue ( you just have to try to change value in last visible column in Datagridview)
hope it will give you insight
Re: error system.argumentexception: datagridviewcomboboxCell value not Valid
You should follow the CodeBank link my signature below and check out my thread on adding a combo box column to a DataGridView. You need to bind or add items to the column before you bind data to the grid.
Re: error system.argumentexception: datagridviewcomboboxCell value not Valid
Quote:
Originally Posted by
Keerti
Hi Peter, I have added a sample of Code, which if you run by adding attached Database, you can see the issue ( you just have to try to change value in last visible column in Datagridview)
hope it will give you insight
At the moment I have no way to open your attached file, which by the way, is just a database and the code you provided depends on several things that are missing.
Re: error system.argumentexception: datagridviewcomboboxCell value not Valid
Quote:
Originally Posted by
jmcilhinney
You should follow the CodeBank link my signature below and check out my thread on adding a combo box column to a DataGridView. You need to bind or add items to the column before you bind data to the grid.
Thanks for this reference, I am already using it in my projects. Here My query is Can I use different Tables for comboboxes in different rows?
In the Example I have added as Code in my First Post Question, It has 2 different set of Items in 2 Rows. And If I change Value in one row combo and then click the Other Rows Combo Column, I get Error.
Re: error system.argumentexception: datagridviewcomboboxCell value not Valid
Quote:
Originally Posted by
Peter Swinkels
At the moment I have no way to open your attached file, which by the way, is just a database and the code you provided depends on several things that are missing.
I have changed the Code and now you will not need any attachment to run this.
Please note this is a part of My Project, not the complete project, hence you might find some things illogical, but I hope I have been able to explain my problem.
"It has 2 different set of Combo Items in 2 Rows. And If I change Value in one row combo and then click the Other Rows Combo Column, I get Error."
Re: error system.argumentexception: datagridviewcomboboxCell value not Valid
Quote:
Originally Posted by
Keerti
Thanks for this reference, I am already using it in my projects. Here My query is Can I use different Tables for comboboxes in different rows?
In the Example I have added as Code in my First Post Question, It has 2 different set of Items in 2 Rows. And If I change Value in one row combo and then click the Other Rows Combo Column, I get Error.
Sorry, I should have read the question more carefully. The answer is yes, but it will be a bit fiddly. If you set the DataSource for the column then that flows through to all cells but you can set each cell's DataSource individually. The problem is that you will need to bind the cells before the grid still, which may be tricky. Possibly the best way would be to create one list for the column that will cover all possibilities, so initial binding works, then create individual lists only when editing a cell. When I can, I'll take a closer look and try to create an example.
Re: error system.argumentexception: datagridviewcomboboxCell value not Valid
Quote:
Originally Posted by
jmcilhinney
Sorry, I should have read the question more carefully. The answer is yes, but it will be a bit fiddly. If you set the DataSource for the column then that flows through to all cells but you can set read cell's DataSource individually. The problem is that you will need to bind the cells before the grid still, which may be tricky. Possibly the best way would be to create one list for the column that will cover all possibilities, so initial binding works, then create individual lists only when editing a cell. When I can, I'll take a closer look and try to create an example.
Thanks, I would appreciate, if you could create any example, ( whenever possible).