2016-04-16 2 views
0

Позвольте мне, что снова здесь ... моя Delete функция в ASP.NET веб-форму здесь:Первый элемент в ListBox всегда получает прочитать вместо выбранного (выделенного) элемента в ListBox

 //delete a product from the product list 
    protected void btn_Del_Click(object sender, EventArgs e) 
    { 
     int index = lst_Products.SelectedIndex; //<=== this is the code that gets me stumped. 
               //index keeps returning 0 (zero) whether postback or not 

     //Store product cID and FullLine for LINQ compare 
     string pFullLine = lst_Products.Items[index].ToString(); 
     int cID = Convert.ToInt32(lst_Products.Items[index].Value); 

     // Read ViewState 
     List<Product> allProducts = (List<Product>)ViewState["products"]; 

     List<Product> productsfiltered = allProducts 
             .Where(product => product.CategoryId == cID && product.FullLine == pFullLine).ToList(); 

     foreach (Product prodToDelete in productsfiltered) 
     { 
      //delete it. Most of the time this would only be one item, but more than one entry is possible. 
      allProducts.Remove(prodToDelete); 
     } 

     //store modified product list 
     ViewState["products"] = allProducts; 


     //lst_Products.DataBind(); 
     //BindProdData(); 

     //display products 
     ShowProd(); 

     //show cat ID in Product ID textbox (product ID always = Category ID) 
     txt_ProdID.Text = cID.ToString(); 

    } 

Стрелка в коде показывает, где возникает проблема: lst_Products.SelectedIndex указывает неверное значение индекса, указывающее на первый элемент, указанный в списке, lst_Products, который указывает на индекс 0 вместо индекса 1 (выделенная запись в списке). Взгляните ниже это изображение:

Code snippets with debugging data and "Existing Products:" lst_Products listbox

ли я непонимание цели SelectedIndex части коды? Я подумал, что нужно считать выделенный предмет. Если нет, что я могу сделать, чтобы прочитать выбранный (выделенный) элемент в списке?

Ниже меньшая часть моего кода с данными отладки для сравнения:

Smaller code snippet with debugging data embedded

В частности, я мышиный индекс 1 в ListBox, чтобы выделить ее, а затем нажмите кнопку Удалить, а индекс 0 вместо этого удаляется.

Так что мои вопросы:

  1. Почему индекс 0 "выбран = истина", несмотря на мой индекс 1 в раскраски, в ListBox?
  2. Как получить индекс 1 (или только индекс 0), выбранный так, чтобы он удалил мою процедуру удаления, чтобы удалить ее? Я пытаюсь получить текстовую строку из списка на основе индекса.
  3. Есть ли более подходящий код для выполнения того же самого?

Благодарим за помощь.

+1

Как вы можете добавить товар в список? Это источник данных? или вручную добавление таких элементов, как listbox.items.add («некоторые данные»); –

+0

Вы получаете правильное значение в lst_Products.SelectedValue? – Mainak

+0

@CST Он поставляется с ViewState. Эта часть кода также работает. –

ответ

0

Вы пробовали следовать?

DropDownList1.Items[DropDownList1.SelectedIndex].Value 
+0

Пробовал, что. Не получилось. –

+0

В любом случае, это список, а не раскрывающийся список. –

+0

О, я сожалею, что не видел, что –

0

У меня была такая же проблема со списком на Winform - первый элемент в списке был выбран автоматически. Я очистил список выбора первого (VB.NET код):

lboxMembershipTypes.SelectedItems.Clear() 

Затем я выбрал элементы в ListBox на основе выбранных элементов в моем наборе:

'check each row in the dataset 

For Each MembershipROW In MyDataset.Tables(0).Rows 

'select this membership type in the listbox 

MembershipType = MembershipROW.Item("MembershipType") 

MembershipIndex = lboxMembershipTypes.FindStringExact(MembershipType) 

'is this membership in our list? 

If (MembershipIndex <> ListBox.NoMatches) Then 

    'is this membership selected? 

    If (MembershipROW.Item("SelectMembership")) Then 

    'select this membership type 

    lboxMembershipTypes.SetSelected(MembershipIndex, True) 

    End If 

End If 

Next 

я сделал более общее решение чем просто проверить, был ли выбран первый элемент, а если нет, то отменить его - однако это тоже сработает.

+0

Извините, но я не смог получить весь код, который будет выделен, обратите внимание, что «Для каждого ...» - это начало раздела кода, а «Далее» внизу - конец кода. –

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