How to have combobox take data from a child datasource
- by SkollSunman
I am trying to have a datagridview with two comboboxes, a company name and a supplier account number.
When a company name is selected the relevant supplier account numbers (a company can have more than one supplier account) should be filtered for that company in that row.
I have a datagridview with two bindingsources: supplierBindingSource and companyBindingSource and the Supplier account combobox uses the supplierBindingSource for its datasource and company name uses the companyBindingSource for its datasource.
A company can have a supplier and/or customer account so the supplierBindingSource is a child or a companyBindingSource.
The supplier accounts correctly filter based on the selected company name however when another company name is selected in another row all the supplier accounts are filtered for that company.
Saving still works properly, regardless of what the combo box show but currently it is very confusing for a user to select a supplier account when the labels don't show what is being saved. Is it possible to have only the selected row to filter based on the company name rather than every row?
EDIT: Thanks to the answer from http://social.msdn.microsoft.com/Forums/windows/en-US/b23d9e8f-a00a-49ba-adf5-52d87c1b2890/parent-child-comboboxes-in-datagridview
I have been able to make some progress. The supplier account gets filtered when the drop down box is selected and restored to the full list when selection is finished.
However now I am trying to have the company selected (and not filtered) when a supplier account is selected.
The issue I've run into now is that I can get the companyID (which is the valuemember for the company combobox) but I cannot select the appropriate company without just setting the value of the combobox to the companyID which displays the companyID instead of the company name.
Is there a way to select the company using the companyID while preserving the displaymember/valuemember dynamic?
EDIT 2: The wall of text may be off putting. Some code to help elucidate my issue
DataGridViewComboBoxCell dgcb2 = (DataGridViewComboBoxCell)sdgvSalesOrderLines[cmbSupplierName.Index, e.RowIndex];
var companyID = col.FirstOrDefault(c => c.AccountID == Convert.ToInt32(dgcb.Value)).CompanyID;
dgcb2.Value = companyID.toString();
The second line gets the companyID and that works just fine, the final line sets the combobox to display the companyID whereas I would like it to set the valuemember value to companyID so that it would display the corresponding company name.
I can set the second line to give me the company name instead but if the value of the combobox isn't the companyID then the supplier account cannot filter based on the company selected.