I have a combobox that user can select an Item and based on that item in the checkedlistbox some other items need to be populated.
This is the code that used to use to bind source to a combobox, but does not work for this case.
comboBox1.ValueMember = "crane index";
comboBox1.DisplayMember = "crane type";
comboBox1.DataSource = test.Tables["cranemaintable"];
this the table in the database
| Crane Index | Crane Model Number | Crane Type |
|:-----------:|:------------------:|:-----------:|
| 221 | LR 1400-1 | Crawler |
| 258 | CC 2800 | Crawler |
| 262 | CC 2400-1 | All Terrain |
| 265 | CC 6800 | Crawler |
| 277 | LR 11350 | All Terrain |
I have checked the other questions related to mine but could not find an answer to my problem. Your help will be appreciated. Thanks.
Update: This is what I have found and worked for me.
// create a list that holds all the crane types but it should not have duplicated items
List<string> crane_type = new List<string>();
for (int i = 0; i< test.Tables["cranemaintable"].Rows.Count; i++)
{
if (!crane_type.Contains(test.Tables["cranemaintable"].Rows[i]["crane type"]))
{
crane_type.Add(Convert.ToString(test.Tables["cranemaintable"].Rows[i]["crane type"]));
}
}
//bind the crane_type list to the combobox1
comboBox1.DataSource = crane_type;
Ok first my answer is ugly but it works and its the only one I know, so we start with you importing your databasetabe into a list this is a class you can use
public class myclass
{
public string CraneIndex { get; set; }
public string CraneModelNumber { get; set; }
public string CraneType { get; set; }
}
and then make 3 lists
List<myclass> myclasses = new List<myclass>();
List<myclass> myclasses1 = new List<myclass>();
List<myclass> myclasses2 = new List<myclass>();
here you import your table into the list myclasses
and then we filter the main list that came from the database to only have unique types
myclasses1 = myclasses.GroupBy(myclass => myclass.CraneType).Select(x => x.First()).ToList();
comboBox1.DataSource = myclasses1;
comboBox1.DisplayMember = "CraneType";
go to the combobox
and subscribe to the selectedindexchanged
property and add this into its function
myclasses2.Clear();
foreach (var item in myclasses)
{
if (comboBox1.Text==item.CraneType)
{
myclasses2.Add(item);
}
}
checkedListBox1.Items.Clear();
foreach (var item in myclasses2)
{
checkedListBox1.Items.Add(item.CraneModelNumber);
}
this.checkedListBox1.DisplayMember = "cranemodels";
checkedListBox1.Refresh();
Let me know if you need any more help or explanation.