What I have done in situations like yours is to create a special combobox
item class. In your case you could try something like this:
Create a class for holding the activity information:
public class Activity
{
private int activityID;
private string activityName;
private int companyID;
public Activity(int activityID, string activityName, int companyID)
{
this.activityID = activityID;
// other assignments here
}
// get accessors here for activityID, actvityName, companyID
public int CompanyID
{
get { return companyID; }
}
// important part
// override the ToString method so that the combobox will know what to
display
public override string ToString()
{
return activityName;
}
}
Once this class is defined use your DataReader to construct instances of
this class. These instances of Activity are then added to the comboBox
using the comboBox1.Items.Add(myCurrentActivityInstance). The comboBox will
use the ToString() method of your class to determine what to display to the
user. You can ditch the ArrayList middleman here because you are creating
Activity instances and adding them directly to the combobox. There is no
binding used with the Activity combobox with this solution.
Now how to use all this. First for the Company dropdown I would data bind
to a table for loading this combo box. Like the following:
// code to fill your dataset with company info, namely company id and
company name
// then
companyCombo.DisplayMember = "CompanyName";
companyCombo.ValueMember = "CompanyID";
companyCombo.DataSource = myDataSet.Tables[0]; // bind to the company
info table
Now in the SelectedIndexChanged event of the Activity combobox you can do
this:
Activity activity = (Activity)activityCombo.SelectedItem();
companyCombo.SelectedValue = activity.CompanyID;
This should work for you. This is what I love about .NET and the new
controls. You no longer have to use the Tag property crap work arounds to
store extra information for a list item. You can create your own list item
class and simply add instances of it to the list. To get the information
back out just type cast the selected item to the appropriate class and all
your extra information is available to you.
Like everything in .NET there are many ways to accomplish something like
this. You may be able to use some sort of binding for the Activity combobox
but I have not look into any of that. Maybe someone could suggest a
possibly more robust way that uses binding all around.
Questions welcomed.
HTH
--
C Addison Ritchie, MCSD.NET
Ritch Consulting, Inc.
NCrum said:
Thanks
You are correct for the Company but the Activity box has the Activity has
the Activity name for display and its Value is Actid
they were both populated by a reader into an Arraylist which is bound to the Combobox, does that help?
C Addison Ritchie said:
I'm sure there is a better way as well. But I need more information. How
are your dropdowns setup? I ask this because this control has the Display
value and a value that you can associate with this Display value.
I assume you have a Company dropdown that has CoID as the Value and the
CompanyName as the Display value. But what is in the Activity dropdown? Is
the Activity name the Display value and the CoID associated with this
activity as the Value item?
If this is the case then you should be able to use the SelectedValue
property on the Company dropdown to the SelectedValue property of the
Activity dropdown. Again assuming you have setup your dropdowns
appropriately. There would be no need to cycle through each item in the
Company dropdown. Be aware that when you set the Company dropdown the
SelectedIndexChanged event is going to fire for this dropdown.
If this doesn't help then describe what is in each dropdown as far as value
members and display members and I might be able to help a little more. I'm
having to assume a lot here because I don't know how you're populating your
dropdowns.
--
C Addison Ritchie, MCSD.NET
Ritch Consulting, Inc.
Thanks for your reply
I am not sure either of us understands the other
I have Table "A" with a list of "CompayNames" and an Id No "CoId"
also
I have a Table "B" with a list of "Acitivites" this is related to
"CompanyNames" by the id no "Coid"
When I change the activity in my winform I want the drop down to
reflect this change and display the "CompanyName" using this "Activity" <<<
each company may have many activities but one activity can only have one
company
Ta, N
:
[looking for a value in a combo box]
Do you really need the int.Parse(), or can you put your number into a
canonical format and then search for that? In the latter case, you can
use combo.FindString or combo.FindStringExact.
P.