|
Subject:
|
Filtering combobox from a dataview.
|
|
Posted By:
|
Nellemandela
|
Post Date:
|
8/26/2008 7:54:16 AM
|
Hi im trying to "bind" some comboboxes together. But im stuck.
I have 3 comboboxes im trying to bind.
cbxType (holds all values (Name,Id) from the Type Table) cbxMake (holds all values (Name,Id) where TypeId = selectedindex from cbxType from the Make Table) cbxModel (holds all values where (Name,Id) MakeId = selectedindex from cbxMake from the Model Table)
I suppose im stuck at (and below)
DataView makeView = new DataView(ds.Tables["Make"])
My database:
Table: Type
Id (Int)
Name(String)
Table: Make
Id (Int)
TypeId (Int)
Name(String)
Table: Model
Id (Int)
MakeId (Int)
Name(String)
// Create dataset
ds = new DataSet("TypeMakeModel");
//Tablemapping "Type"
command.CommandText = "SELECT * FROM Type";
OleDbDataAdapter da1 = new OleDbDataAdapter(command);
da1.TableMappings.Add("Table", "Type");
da1.Fill(ds);
//Tablemapping "Make"
command.CommandText = "SELECT * FROM Make";
OleDbDataAdapter da2 = new OleDbDataAdapter(command);
da2.TableMappings.Add("Table", "Make");
da2.Fill(ds);
dsView = ds.DefaultViewManager;
cbxType.DataSource = dsView;
cbxType.DisplayMember = "Type.Name";
cbxType.ValueMember = "Type.Id";
DataView makeView = new DataView(ds.Tables["Make"]);
int typeid = cbxType.SelectedIndex;
makeView.RowFilter = "TypeId = " + typeid;
cbxMake.DataSource = makeView;
cbxMake.DisplayMember = "Make.Name";
cbxMake.ValueMember = "Make.Id";
cbxModel.DataSource = dsView;
cbxModel.DisplayMember = "Model.Name";
cbxModel.ValueMember = "Model.Id";
|
|
Reply By:
|
pradeep_itguy
|
Reply Date:
|
8/27/2008 12:55:33 AM
|
If you want a ripple effect of changing one should affect other then you need to handle that in an event. For example in this case you need to set the DataSource properties in the SelectedChange event of the cbxType for cbxMake
so in cbxMake SelectedChange event set the DataSource i.e. you have the following code
DataView makeView = new DataView(ds.Tables["Make"]); int typeid = cbxType.SelectedIndex; makeView.RowFilter = "TypeId = " + typeid;
cbxMake.DataSource = makeView; cbxMake.DisplayMember = "Make.Name"; cbxMake.ValueMember = "Make.Id";
cbxModel.DataSource = dsView; cbxModel.DisplayMember = "Model.Name"; cbxModel.ValueMember = "Model.Id";
It is not how much we do, but how much love we put in the doing.
-Mother Theresa
|
|
Reply By:
|
Nellemandela
|
Reply Date:
|
8/27/2008 3:49:34 AM
|
Thanks the code you posted somewhat solved my problem. But a new problem has emerged.
The code below throws this error. {"Unable to cast object of type 'System.Data.DataViewManagerListItemTypeDescriptor' to type 'System.IConvertible'."}
i need to use the SelectedValue because there might be gaps in id's if a type has been deleted.
private void cbxType_SelectedValueChanged(object sender, EventArgs e)
{
label4.Text = cbxType.SelectedValue.ToString();
makeView = new DataView(ds.Tables["Make"]);
int filter = Convert.ToInt32(cbxType.SelectedValue);
makeView.RowFilter = "TypeId = " + filter;
cbxMake.DataSource = makeView;
cbxMake.DisplayMember = "Name";
cbxMake.ValueMember = "Id";
}
|
|
Reply By:
|
Nellemandela
|
Reply Date:
|
8/28/2008 2:10:12 PM
|
Found this link that solved all my problems.
http://www.vbforums.com/showthread.php?t=518067
Thank you for you help
|