изберете същия индекс в списъчното поле

Правя уебсайт в asp.net и имам 2 списъчни полета:

lbxPlayer1 and lbxPlayer2

lbxPlayer1.Items.Add("bob");
lbxPlayer1.Items.Add("jack");
lbxPlayer1.Items.Add("sam");

lbxPlayer2.Items.Add("fred");
lbxPlayer2.Items.Add("brian");
lbxPlayer2.Items.Add("dave");

и двата са били попълнени с еднакво количество стойности и бих искал, така че когато се щракне върху един от списъците, другият списък ще избере същия индекс.

как да направя това предполагам, че кодът ще бъде в събитието lbxPlayer1_SelectedIndexChanged?

така че когато щракна върху "jack", искам "Brian" също да бъде избрано.


person brian4342    schedule 02.03.2013    source източник


Отговори (1)


Използвайте свойството SelectedIndex:

int index = lbxPlayer1.SelectedIndex;
if(lbxPlayer2.Items.Count > index)
   lbxPlayer2.SelectedIndex = index;

If SelectionMode is Multiple:

for (int i = 0; i < lbxPlayer2.Items.Count; i++)
{ 
    if(i >= lbxPlayer1.Items.Count)
        lbxPlayer2.Items[i].Selected = false;
    else
        lbxPlayer2.Items[i].Selected = lbxPlayer1.Items[i].Selected;
}

Актуализация

добре, опитах го и нищо не се случи също опитах това и също нищо не се случи lbxPlayer2.SelectedIndex = lbxPlayer1.SelectedIndex;. Dayabinding се извършва в събитието pageload (което не мога да променя), което аз > вярвам, че винаги е o

Обвържете ги само с данни if(!IsPostBack), тъй като ViewState ще задържи елементи при обратно изпращане. Така че предполагам, че това събитие никога не се задейства, защото обвързвате отново ListBoxes при обратно изпращане.

person Tim Schmelter    schedule 02.03.2013
comment
не използва множество и горният код, който публикувахте, не работи - person brian4342; 03.03.2013
comment
и двата списъка имат едно и също количество стойности, така че ако има 10 елемента и в двата списъка и аз избера елемента с индекс 0, if инструкцията, която сте публикували, няма да изчезне - person brian4342; 03.03.2013
comment
@BrianPeach защо е така? 10 › 0 - person MikeSmithDev; 03.03.2013
comment
добре, опитах го и нищо не се случи също опитах това и също нищо не се случи :\ lbxPlayer2.SelectedIndex = lbxPlayer1.SelectedIndex; - person brian4342; 03.03.2013
comment
@BrianPeach: Разбира се, вторият също не работи, тъй като е същият код като моя, само без if. Сигурен съм, че и lbxPlayer2.SelectedIndex=0 не работи. Може би обвързвате данни lbxPlayer2, след като сте променили SelectedIndex. Това обяснява защо не можете да промените избора. - person Tim Schmelter; 03.03.2013
comment
добре, мисля, че си прав, dayabinding се извършва в събитието за зареждане на страницата (което не мога да променя), което вярвам, че винаги се случва и пречи на това да работи - person brian4342; 03.03.2013
comment
@BrianPeach: Обвързвайте ги само с данни if(!IsPostBack), тъй като ViewState ще запази елементи при обратно изпращане. Така че предполагам, че това събитие никога не се задейства, защото обвързвате отново ListBoxes при обратно изпращане. - person Tim Schmelter; 03.03.2013
comment
добавен if(!IsPostBack) и все още няма разлика, кодът се изпълнява, но не прави нищо :s - person brian4342; 04.03.2013
comment
@BrianPeach: Трябва да актуализирате въпроса си, в противен случай никой не знае какво сте опитали сега и какъв е резултатът. - person Tim Schmelter; 04.03.2013