When I set the DropDownList.SelectedIndex of ONE DropDownList they ALL change!

Discussion in 'ASP .Net' started by S_K, Nov 13, 2007.

  1. S_K

    S_K Guest

    Hi,

    I have a list of 6 DropDownList boxes, from DropDownList1 to
    DropDownList6, and I'm changing the SelectedIndex of each using a
    foreach loop as follows:

    foreach(PaymentReqDisplay thispayment in listPaymentReqDisplay)
    {
    if ((string)thispayment.TaxType == "FIT")
    this.DropDownList1.SelectedIndex =
    (int)thispayment.PaymentRequirementID - 1;
    if ((string)thispayment.TaxType == "FUI")
    this.DropDownList2.SelectedIndex =
    (int)thispayment.PaymentRequirementID - 1;
    if ((string)thispayment.TaxType == "SIT")
    this.DropDownList3.SelectedIndex =
    (int)thispayment.PaymentRequirementID - 1;
    if ((string)thispayment.TaxType == "SUI")
    this.DropDownList4.SelectedIndex =
    (int)thispayment.PaymentRequirementID - 1;
    if ((string)thispayment.TaxType == "ETF")
    this.DropDownList5.SelectedIndex =
    (int)thispayment.PaymentRequirementID - 1;
    if ((string)thispayment.TaxType == "SDI")
    this.DropDownList6.SelectedIndex =
    (int)thispayment.PaymentRequirementID - 1;
    }

    The problem is that when I change, say, DropDownList4.SelectedIndex =
    3; every other DropDownList's SelectedIndex changes as well!?

    What am I doing wrong?

    Thanks much for your help.
    Steve
    S_K, Nov 13, 2007
    #1
    1. Advertising

  2. Do all ddls share the same items?

    When you set the SelectedIndex property, it actually sets the Selected
    property of the item you select. Thus the same item becomes selected in all
    ddls it is participating.

    The solution is to replicate the item collection for every single ddl.

    --
    Eliyahu Goldin,
    Software Developer
    Microsoft MVP [ASP.NET]
    http://msmvps.com/blogs/egoldin
    http://usableasp.net


    "S_K" <> wrote in message
    news:...
    > Hi,
    >
    > I have a list of 6 DropDownList boxes, from DropDownList1 to
    > DropDownList6, and I'm changing the SelectedIndex of each using a
    > foreach loop as follows:
    >
    > foreach(PaymentReqDisplay thispayment in listPaymentReqDisplay)
    > {
    > if ((string)thispayment.TaxType == "FIT")
    > this.DropDownList1.SelectedIndex =
    > (int)thispayment.PaymentRequirementID - 1;
    > if ((string)thispayment.TaxType == "FUI")
    > this.DropDownList2.SelectedIndex =
    > (int)thispayment.PaymentRequirementID - 1;
    > if ((string)thispayment.TaxType == "SIT")
    > this.DropDownList3.SelectedIndex =
    > (int)thispayment.PaymentRequirementID - 1;
    > if ((string)thispayment.TaxType == "SUI")
    > this.DropDownList4.SelectedIndex =
    > (int)thispayment.PaymentRequirementID - 1;
    > if ((string)thispayment.TaxType == "ETF")
    > this.DropDownList5.SelectedIndex =
    > (int)thispayment.PaymentRequirementID - 1;
    > if ((string)thispayment.TaxType == "SDI")
    > this.DropDownList6.SelectedIndex =
    > (int)thispayment.PaymentRequirementID - 1;
    > }
    >
    > The problem is that when I change, say, DropDownList4.SelectedIndex =
    > 3; every other DropDownList's SelectedIndex changes as well!?
    >
    > What am I doing wrong?
    >
    > Thanks much for your help.
    > Steve
    >
    Eliyahu Goldin, Nov 14, 2007
    #2
    1. Advertising

  3. S_K

    S_K Guest

    On Nov 14, 2:52 am, "Eliyahu Goldin"
    <> wrote:
    > Do all ddls share the same items?
    >
    > When you set the SelectedIndex property, it actually sets the Selected
    > property of the item you select. Thus the same item becomes selected in all
    > ddls it is participating.
    >
    > The solution is to replicate the item collection for every single ddl.
    >
    > --
    > Eliyahu Goldin,
    > Software Developer
    > Microsoft MVP [ASP.NET]http://msmvps.com/blogs/egoldinhttp://usableasp.net
    >
    > "S_K" <> wrote in message
    >
    > news:...
    >
    >
    >
    > > Hi,

    >
    > > I have a list of 6 DropDownList boxes, from DropDownList1 to
    > > DropDownList6, and I'm changing the SelectedIndex of each using a
    > > foreach loop as follows:

    >
    > > foreach(PaymentReqDisplay thispayment in listPaymentReqDisplay)
    > > {
    > > if ((string)thispayment.TaxType == "FIT")
    > > this.DropDownList1.SelectedIndex =
    > > (int)thispayment.PaymentRequirementID - 1;
    > > if ((string)thispayment.TaxType == "FUI")
    > > this.DropDownList2.SelectedIndex =
    > > (int)thispayment.PaymentRequirementID - 1;
    > > if ((string)thispayment.TaxType == "SIT")
    > > this.DropDownList3.SelectedIndex =
    > > (int)thispayment.PaymentRequirementID - 1;
    > > if ((string)thispayment.TaxType == "SUI")
    > > this.DropDownList4.SelectedIndex =
    > > (int)thispayment.PaymentRequirementID - 1;
    > > if ((string)thispayment.TaxType == "ETF")
    > > this.DropDownList5.SelectedIndex =
    > > (int)thispayment.PaymentRequirementID - 1;
    > > if ((string)thispayment.TaxType == "SDI")
    > > this.DropDownList6.SelectedIndex =
    > > (int)thispayment.PaymentRequirementID - 1;
    > > }

    >
    > > The problem is that when I change, say, DropDownList4.SelectedIndex =
    > > 3; every other DropDownList's SelectedIndex changes as well!?

    >
    > > What am I doing wrong?

    >
    > > Thanks much for your help.
    > > Steve- Hide quoted text -

    >
    > - Show quoted text -


    So you are saying that by setting the SelectIndex of (say) the first
    ddl ALL of the ddls in that group get set along with it?
    So how do I replicate the item collection for every single ddl? I
    don't understand what you mean. Could you give me a code example?

    Thanks so much for your help.
    Steve
    S_K, Nov 14, 2007
    #3
  4. I mean every ddl should have it's own item collection, not shared with the
    other ddls.

    How do you populate the ddls?

    --
    Eliyahu Goldin,
    Software Developer
    Microsoft MVP [ASP.NET]
    http://msmvps.com/blogs/egoldin
    http://usableasp.net


    "S_K" <> wrote in message
    news:...
    > On Nov 14, 2:52 am, "Eliyahu Goldin"
    > <> wrote:
    >> Do all ddls share the same items?
    >>
    >> When you set the SelectedIndex property, it actually sets the Selected
    >> property of the item you select. Thus the same item becomes selected in
    >> all
    >> ddls it is participating.
    >>
    >> The solution is to replicate the item collection for every single ddl.
    >>
    >> --
    >> Eliyahu Goldin,
    >> Software Developer
    >> Microsoft MVP
    >> [ASP.NET]http://msmvps.com/blogs/egoldinhttp://usableasp.net
    >>
    >> "S_K" <> wrote in message
    >>
    >> news:...
    >>
    >>
    >>
    >> > Hi,

    >>
    >> > I have a list of 6 DropDownList boxes, from DropDownList1 to
    >> > DropDownList6, and I'm changing the SelectedIndex of each using a
    >> > foreach loop as follows:

    >>
    >> > foreach(PaymentReqDisplay thispayment in listPaymentReqDisplay)
    >> > {
    >> > if ((string)thispayment.TaxType == "FIT")
    >> > this.DropDownList1.SelectedIndex =
    >> > (int)thispayment.PaymentRequirementID - 1;
    >> > if ((string)thispayment.TaxType == "FUI")
    >> > this.DropDownList2.SelectedIndex =
    >> > (int)thispayment.PaymentRequirementID - 1;
    >> > if ((string)thispayment.TaxType == "SIT")
    >> > this.DropDownList3.SelectedIndex =
    >> > (int)thispayment.PaymentRequirementID - 1;
    >> > if ((string)thispayment.TaxType == "SUI")
    >> > this.DropDownList4.SelectedIndex =
    >> > (int)thispayment.PaymentRequirementID - 1;
    >> > if ((string)thispayment.TaxType == "ETF")
    >> > this.DropDownList5.SelectedIndex =
    >> > (int)thispayment.PaymentRequirementID - 1;
    >> > if ((string)thispayment.TaxType == "SDI")
    >> > this.DropDownList6.SelectedIndex =
    >> > (int)thispayment.PaymentRequirementID - 1;
    >> > }

    >>
    >> > The problem is that when I change, say, DropDownList4.SelectedIndex =
    >> > 3; every other DropDownList's SelectedIndex changes as well!?

    >>
    >> > What am I doing wrong?

    >>
    >> > Thanks much for your help.
    >> > Steve- Hide quoted text -

    >>
    >> - Show quoted text -

    >
    > So you are saying that by setting the SelectIndex of (say) the first
    > ddl ALL of the ddls in that group get set along with it?
    > So how do I replicate the item collection for every single ddl? I
    > don't understand what you mean. Could you give me a code example?
    >
    > Thanks so much for your help.
    > Steve
    >
    Eliyahu Goldin, Nov 14, 2007
    #4
  5. S_K

    S_K Guest

    On Nov 14, 8:29 am, S_K <> wrote:
    > On Nov 14, 2:52 am, "Eliyahu Goldin"
    >
    >
    >
    >
    >
    > <> wrote:
    > > Do all ddls share the same items?

    >
    > > When you set the SelectedIndex property, it actually sets the Selected
    > > property of the item you select. Thus the same item becomes selected in all
    > > ddls it is participating.

    >
    > > The solution is to replicate the item collection for every single ddl.

    >
    > > --
    > > Eliyahu Goldin,
    > > Software Developer
    > > Microsoft MVP [ASP.NET]http://msmvps.com/blogs/egoldinhttp://usableasp.net

    >
    > > "S_K" <> wrote in message

    >
    > >news:...

    >
    > > > Hi,

    >
    > > > I have a list of 6 DropDownList boxes, from DropDownList1 to
    > > > DropDownList6, and I'm changing the SelectedIndex of each using a
    > > > foreach loop as follows:

    >
    > > > foreach(PaymentReqDisplay thispayment in listPaymentReqDisplay)
    > > > {
    > > > if ((string)thispayment.TaxType == "FIT")
    > > > this.DropDownList1.SelectedIndex =
    > > > (int)thispayment.PaymentRequirementID - 1;
    > > > if ((string)thispayment.TaxType == "FUI")
    > > > this.DropDownList2.SelectedIndex =
    > > > (int)thispayment.PaymentRequirementID - 1;
    > > > if ((string)thispayment.TaxType == "SIT")
    > > > this.DropDownList3.SelectedIndex =
    > > > (int)thispayment.PaymentRequirementID - 1;
    > > > if ((string)thispayment.TaxType == "SUI")
    > > > this.DropDownList4.SelectedIndex =
    > > > (int)thispayment.PaymentRequirementID - 1;
    > > > if ((string)thispayment.TaxType == "ETF")
    > > > this.DropDownList5.SelectedIndex =
    > > > (int)thispayment.PaymentRequirementID - 1;
    > > > if ((string)thispayment.TaxType == "SDI")
    > > > this.DropDownList6.SelectedIndex =
    > > > (int)thispayment.PaymentRequirementID - 1;
    > > > }

    >
    > > > The problem is that when I change, say, DropDownList4.SelectedIndex =
    > > > 3; every other DropDownList's SelectedIndex changes as well!?

    >
    > > > What am I doing wrong?

    >
    > > > Thanks much for your help.
    > > > Steve- Hide quoted text -

    >
    > > - Show quoted text -

    >
    > So you are saying that by setting the SelectIndex of (say) the first
    > ddl ALL of the ddls in that group get set along with it?
    > So how do I replicate the item collection for every single ddl? I
    > don't understand what you mean. Could you give me a code example?
    >
    > Thanks so much for your help.
    > Steve- Hide quoted text -
    >
    > - Show quoted text -


    I FOUND THE PROBLEM!!!

    This is what happend.
    In my code I called a method to fill the Items value for each
    DropDownList using a ListItem as in the code:

    for (int i = 0; i < listPaymentReq.Count; i++)
    {
    ListItem li = new
    ListItem(listPaymentReq.Payment_Req_Code.ToString(),
    listPaymentReq.Payment_Req_ID.ToString());

    DropDownList1.Items.Insert(i, li);
    DropDownList2.Items.Insert(i, li);
    DropDownList3.Items.Insert(i, li);
    ..
    ..
    .. }

    Note that the "li" is a pointer and I'm inserting the SAME Items value
    into each ddl! This apparently means that the SelectedIndex for each
    ddl is also a pointer pointing to the same location as well.

    You learn something new everyday.

    thanks for the help.

    Steve
    S_K, Nov 14, 2007
    #5
  6. > This apparently means that the SelectedIndex for each
    > ddl is also a pointer pointing to the same location as well.


    SelectedIndex is not a pointer, it is a property and when you set or get it,
    some code runs.

    When you "set" it, asp.net goes to the Items collection and mark the item as
    "Selected" be setting li.Selected = true.

    When you "get" the SelectedIndex on another ddl, asp.net goes to the Items
    collection, finds the item with Selected=true and returns it's index. This
    causes the effect you observed and successfully fixed.

    --
    Eliyahu Goldin,
    Software Developer
    Microsoft MVP [ASP.NET]
    http://msmvps.com/blogs/egoldin
    http://usableasp.net


    "S_K" <> wrote in message
    news:...
    > On Nov 14, 8:29 am, S_K <> wrote:
    >> On Nov 14, 2:52 am, "Eliyahu Goldin"
    >>
    >>
    >>
    >>
    >>
    >> <> wrote:
    >> > Do all ddls share the same items?

    >>
    >> > When you set the SelectedIndex property, it actually sets the Selected
    >> > property of the item you select. Thus the same item becomes selected
    >> > in all
    >> > ddls it is participating.

    >>
    >> > The solution is to replicate the item collection for every single ddl.

    >>
    >> > --
    >> > Eliyahu Goldin,
    >> > Software Developer
    >> > Microsoft MVP
    >> > [ASP.NET]http://msmvps.com/blogs/egoldinhttp://usableasp.net

    >>
    >> > "S_K" <> wrote in message

    >>
    >> >news:...

    >>
    >> > > Hi,

    >>
    >> > > I have a list of 6 DropDownList boxes, from DropDownList1 to
    >> > > DropDownList6, and I'm changing the SelectedIndex of each using a
    >> > > foreach loop as follows:

    >>
    >> > > foreach(PaymentReqDisplay thispayment in listPaymentReqDisplay)
    >> > > {
    >> > > if ((string)thispayment.TaxType == "FIT")
    >> > > this.DropDownList1.SelectedIndex =
    >> > > (int)thispayment.PaymentRequirementID - 1;
    >> > > if ((string)thispayment.TaxType == "FUI")
    >> > > this.DropDownList2.SelectedIndex =
    >> > > (int)thispayment.PaymentRequirementID - 1;
    >> > > if ((string)thispayment.TaxType == "SIT")
    >> > > this.DropDownList3.SelectedIndex =
    >> > > (int)thispayment.PaymentRequirementID - 1;
    >> > > if ((string)thispayment.TaxType == "SUI")
    >> > > this.DropDownList4.SelectedIndex =
    >> > > (int)thispayment.PaymentRequirementID - 1;
    >> > > if ((string)thispayment.TaxType == "ETF")
    >> > > this.DropDownList5.SelectedIndex =
    >> > > (int)thispayment.PaymentRequirementID - 1;
    >> > > if ((string)thispayment.TaxType == "SDI")
    >> > > this.DropDownList6.SelectedIndex =
    >> > > (int)thispayment.PaymentRequirementID - 1;
    >> > > }

    >>
    >> > > The problem is that when I change, say, DropDownList4.SelectedIndex =
    >> > > 3; every other DropDownList's SelectedIndex changes as well!?

    >>
    >> > > What am I doing wrong?

    >>
    >> > > Thanks much for your help.
    >> > > Steve- Hide quoted text -

    >>
    >> > - Show quoted text -

    >>
    >> So you are saying that by setting the SelectIndex of (say) the first
    >> ddl ALL of the ddls in that group get set along with it?
    >> So how do I replicate the item collection for every single ddl? I
    >> don't understand what you mean. Could you give me a code example?
    >>
    >> Thanks so much for your help.
    >> Steve- Hide quoted text -
    >>
    >> - Show quoted text -

    >
    > I FOUND THE PROBLEM!!!
    >
    > This is what happend.
    > In my code I called a method to fill the Items value for each
    > DropDownList using a ListItem as in the code:
    >
    > for (int i = 0; i < listPaymentReq.Count; i++)
    > {
    > ListItem li = new
    > ListItem(listPaymentReq.Payment_Req_Code.ToString(),
    > listPaymentReq.Payment_Req_ID.ToString());
    >
    > DropDownList1.Items.Insert(i, li);
    > DropDownList2.Items.Insert(i, li);
    > DropDownList3.Items.Insert(i, li);
    > .
    > .
    > . }
    >
    > Note that the "li" is a pointer and I'm inserting the SAME Items value
    > into each ddl! This apparently means that the SelectedIndex for each
    > ddl is also a pointer pointing to the same location as well.
    >
    > You learn something new everyday.
    >
    > thanks for the help.
    >
    > Steve
    >
    Eliyahu Goldin, Nov 14, 2007
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. VB Programmer
    Replies:
    1
    Views:
    18,525
    Cliff Harris
    Apr 7, 2004
  2. Linna
    Replies:
    3
    Views:
    2,526
    Linna
    Jan 24, 2005
  3. Linna
    Replies:
    1
    Views:
    631
    Eliyahu Goldin
    Jan 24, 2005
  4. keithb
    Replies:
    1
    Views:
    11,894
    shauns1
    Nov 1, 2006
  5. Replies:
    1
    Views:
    838
Loading...

Share This Page