We help IT Professionals succeed at work.

Change datagridview combobox column to listindex = -1

1,036 Views
Last Modified: 2012-05-10
I have a form with a datagridview populated from a data table.  1 of the columns is a combobox.
Let's say for example there are only 2 columns (the first is a textbox that displays "Name" and the second is a combobox which displays "City").  Right now it shows:

Joe Johnson     Miami
Bob Smith         Boston

My question is how can I set the "City" combobox to listindex -1 after the grid loads so that the city is blank and the user is forced to make a selection.   Again, this is a bound dgv
Comment
Watch Question

CERTIFIED EXPERT
Most Valuable Expert 2012
Top Expert 2014

Commented:
What is the datatype of the combobox column in datatable? Is it text (display member) or numeric(value member)?

Author

Commented:
display member is text
value member is numeric
CERTIFIED EXPERT
Most Valuable Expert 2012
Top Expert 2014

Commented:
Do you have 2 columns in DataTable for the combobox?

Author

Commented:
yes
CERTIFIED EXPERT
Most Valuable Expert 2012
Top Expert 2014

Commented:
Which one do you bind it to? The reason I am asking this is that if you are binding it to the value member then try setting the value member to -1.

Author

Commented:
it's bound to the value member (numeric)
CERTIFIED EXPERT
Most Valuable Expert 2012
Top Expert 2014

Commented:
Yeah then try setting the value to -1 which would probably make the column empty.

Author

Commented:
tried that it has no effect
CERTIFIED EXPERT
Most Valuable Expert 2012
Top Expert 2014

Commented:
Can you show the code you are using to load and bind the grid?

Author

Commented:
here's a stripped down version
Private Sub frmInvRelocate_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim objBllSite As New BLLCity
Dim dsCity As DataSet = objBllSite.GetAllSites()

Dim colCity As New DataGridViewComboBoxColumn

'fill grid from dataset to set dg structure
dgInvRelocate.DataSource = objBllInv.GetInvRelocate(strWhere).Tables(0)
        dgInvRelocate.AutoResizeColumns()

'fill combobox list from city datasource
colName_UIC.DisplayMember = "CITY"
colName_UIC.ValueMember = "CITY_ID"
colName_UIC.DataSource = dsSiteCol.Tables(0).DefaultView

dgInvRelocate.Columns.Add(colCity)

End Sub



Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click

dgInvRelocate.DataSource = objBllInv.GetInvRelocate(strWhere).Tables(0)  

'refresh grid and reset comboboxes
For x = 0 To dgInvRelocate.Rows.Count - 1
   dgInvRelocate.Rows(x).Cells("NAME_UIC").Value = -1
Next
End Sub

Open in new window

Author

Commented:
Where it says "NAME_UIC" in the for loop, it should actually read "CITY_ID".  Sorry for the confusion
CERTIFIED EXPERT
Most Valuable Expert 2012
Top Expert 2014

Commented:

Author

Commented:
it's set to: colCity.DataPropertyName = "CITY_ID"
CERTIFIED EXPERT
Most Valuable Expert 2012
Top Expert 2014

Commented:
Try setting it to City

Author

Commented:
Invalid value error.   Doesn't the dataproperty name have to match the value member??
Commented:
This one is on us!
(Get your first solution completely free - no credit card required)
UNLOCK SOLUTION
CERTIFIED EXPERT
Most Valuable Expert 2012
Top Expert 2014

Commented:
>I can then choose the appropriate city from the combobox.  
But that selection would not be saved to the datatable. How would you save then?

Author

Commented:
we are not saving the datatable.  we are, on a row by row basis (if changes were made) saving directly from the datagridview to the database.  

Author

Commented:
solved in-house
Unlock the solution to this question.
Join our community and discover your potential

Experts Exchange is the only place where you can interact directly with leading experts in the technology field. Become a member today and access the collective knowledge of thousands of technology experts.

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.