2015-02-09 7 views
0

У меня есть список postcodeitems, и я привязываю это к списку. Он состоит из двух объектов: почтовый индекс, площадь.Пользовательские объекты Listbox Foreach Loop

Я хочу перебрать элементы списка, и если элемент выбран, добавьте объект postcodeitem в другой список.

  List<Valueobjects.postcodeitem> temp = _BL.GetPostCodeAreasFromZones(); 
      PCList.AddRange(temp); 
      ListBox1.DataSource = PCList; 
      ListBox1.DataBind(); 


List<Valueobjects.postcodeitem> postcodecollection = new List<Valueobjects.postcodeitem>(); 

foreach (ListItem listitem in ListBox1.Items) 
{ 
    if (listitem.Selected) 
    { 
     i = i + 1; 

     //Run at 20 to speed up query 
     if (i == 20) 
     { 
      //Get data 
      CustList.AddRange(BL.SearchCustomerByPostcodeArea(postcodecollection,2)); 
      i = 0; 
      } 
      else 
      { 
       //add the post code to temp list 
       postcodecollection.Add(listitem); 
      } 
     } 
    } 

    if (i > 0) 
    { 
     //get data 
     CustList.AddRange(BL.SearchCustomerByPostcodeArea(postcodecollection,2)); 
    } 
} 

Очевидно, где я пытаюсь добавить (ListItem) не идет работать, как это элемент списка, а не postcodeitem. Мой вопрос: как получить объект postcodeitem в списке, в котором выбран элемент списка?

спасибо

+0

В следующий раз, когда вы зададите вопрос, будьте так добры, чтобы отформатировать свой вопрос. Трудно было читать. Чем лучше ваш вопрос отформатирован, тем больше ответов вы получите, помните об этом. – Complexity

+0

Можете ли вы опубликовать код, в котором вы связываете ListBox1.Items с источником данных? –

+1

Это может быть так просто: postcodecollection.Add ((Valueobjects.postcodeitem) listitem); –

ответ

1

Попробуйте что-нибудь вроде следующего.

IList<Employee> boundList = ListBox1.DataSource 
var obj = boundList[ListBox1.SelectedIndex] 

Update => Я не проверял код, но что-то вроде следующего. Использование для цикла для отслеживания индекса элемента.

for (int i = 0; i< ListBox1.Items.Length; i++) 
{ 
    if (ListBox1.Items[i].Selected) 
    { 
     i = i + 1; 

     //Run at 20 to speed up query 
     if (i == 20) 
     { 
      //Get data 
      CustList.AddRange(BL.SearchCustomerByPostcodeArea(postcodecollection,2)); 
      i = 0; 
      } 
      else 
      { 
       //add the post code to temp list 
       postcodecollection.Add(ListBox1.DataSource.ToList().ElementAt(i)); 
      } 
     } 
    } 

    if (i > 0) 
    { 
     //get data 
     CustList.AddRange(BL.SearchCustomerByPostcodeArea(postcodecollection,2)); 
    } 
} 

В любом случае это не рекомендуется. Вы должны получить выбранное значение и использовать это выбранное значение (уникальное поле) для извлечения соответствующих данных из любой постоянной базы данных, например базы данных.

+0

Спасибо, однако, я получаю ошибку: Ошибка Невозможно преобразовать тип 'System.Web.UI.WebControls.ListItem' в 'GeoLocation.Classes.Valueobjects.postcodeitem' – user4316519

+0

@ user4316519 Обновлен мой ответ. –

+0

Спасибо, как применить это к моему коду? – user4316519