2010-07-29 5 views
0

Я сохраняю критерии выбора поиска в списке на другой странице, которая называется AreasLb. Несколько областей можно выбрать, я просто хочу, чтобы установить элементы ListBox, которые пользователь выбрал в качестве .selected = истинныйСписок, сохраняющий несколько выбранных элементов в asp.net

Я думаю ниже код должен работать, но это не так, без каких-либо предметов в Listbox быть выбран.

if (s == "Areas") 
      { 
       string[] area = nv[s].Substring(0, (nv[s].Length - 1)).Split(';'); 

       int i = 0; 
       foreach (ListItem item in AreasLb.Items) 
       { 
        foreach (var s1 in area) 
        { 
         if (s1 == item.Value) 
         { 
          AreasLb.Items[i].Selected = true;         
         } 
         continue; 
        } 

        i = i + 1; 
       } 

       continue; 
      } 
+0

Знаете ли вы, что вы нажимаете 'AreasLb.Items [i] .Selected = true;' line? И как только вы закончите с этим разделом кода, вы можете проверить 'AreasLb.Items' и посмотреть, установлены ли правильные элементы в массиве равными true? –

+0

Я нажимаю эту строку и да, она выбрана и установлена ​​в true. У меня действительно есть! Page.IsPostback в загрузке, поэтому ошибки здесь нет. – asn1981

ответ

0

Думаю, что я должен обновить этот вопрос с возможным ответом, который я нашел.

Я в основном принимал код, написанный кем-то другим, и на протяжении всего шоу было несколько Page.DataBind().

Обновлено так, что только 1 на главной странице и, похоже, решила проблему.

0

Я немного подозрительно отношусь к вашему индексированию - не говорю, что это неправильно, но я думаю, что могут быть лучшие способы. Я был бы соблазн использовать:

string[] area = nv[s].Substring(0, (nv[s].Length - 1)).Split(';'); 

foreach (ListItem item in AreasLb.Items) 
{ 
    foreach (var s1 in area) 
    { 
     if (s1 == item.Value) 
     { 
      item.Selected = true;         
     } 
    } 
} 

Или вместо переборе множества ListItems, вы можете использовать Items.FindByText метод, который вырезает foreach и может дать вам немного повышения производительности :-):

ListItem foundItem = null; 

string[] area = nv[s].Substring(0, (nv[s].Length - 1)).Split(';'); 

foreach (var s1 in area) 
{ 
    // Search for a ListItem with the text from the array 
    foundItem = AreasLb.Items.FindByText(s1); 

    if (foundItem == null) 
    { 
     // We didn't find a matching item 
    } 
    else 
    { 
     // We found a matching item so select it 
     foundItem.Selected = true; 
    } 

    foundItem = null; 
} 
+0

благодарю, что мне понравилось второе решение .. но насколько я думаю, каждая отображаемая версия должна работать, но никто этого не делает. что-то еще определенно происходит, чтобы заставить его не работать. не знаю, что, хотя – asn1981

+0

@ N00b Где ваш код отображается в жизненном цикле страницы? Можете ли вы опубликовать немного больше своего окружающего кода? – PhilPursglove

+0

Существует метод вызова кода выше в PageLoad после проверки того, отправляем ли мы обратно или нет. Метод не получает удар по обратной передаче. – asn1981

Смежные вопросы