Позвольте мне, что снова здесь ... моя 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 (выделенная запись в списке). Взгляните ниже это изображение:
ли я непонимание цели SelectedIndex
части коды? Я подумал, что нужно считать выделенный предмет. Если нет, что я могу сделать, чтобы прочитать выбранный (выделенный) элемент в списке?
Ниже меньшая часть моего кода с данными отладки для сравнения:
В частности, я мышиный индекс 1 в ListBox, чтобы выделить ее, а затем нажмите кнопку Удалить, а индекс 0 вместо этого удаляется.
Так что мои вопросы:
- Почему индекс 0 "выбран = истина", несмотря на мой индекс 1 в раскраски, в ListBox?
- Как получить индекс 1 (или только индекс 0), выбранный так, чтобы он удалил мою процедуру удаления, чтобы удалить ее? Я пытаюсь получить текстовую строку из списка на основе индекса.
- Есть ли более подходящий код для выполнения того же самого?
Благодарим за помощь.
Как вы можете добавить товар в список? Это источник данных? или вручную добавление таких элементов, как listbox.items.add («некоторые данные»); –
Вы получаете правильное значение в lst_Products.SelectedValue? – Mainak
@CST Он поставляется с ViewState. Эта часть кода также работает. –