讓我嘗試在這裏再次...我在ASP.NET Web窗體這裏刪除功能:第一項總是被讀,而不是選擇(高亮)項的列表框中
//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中的列表框使其高亮顯示,然後點擊刪除按鈕,但索引取而代之的是0。
所以我的問題是:
- 爲什麼指數0,儘管在列表框中我突出指數1「選擇=真」?
- 如何選擇索引1(或索引0以外的值),以便通過刪除例程將其刪除?我試圖根據索引從列表框中獲取文本字符串。
- 是否有更適合做同樣事情的代碼?
謝謝你的幫助。
如何在列表框中添加項目?它是數據源嗎?或手動添加項目,如listbox.items.add(「一些數據」); –
你在lst_Products.SelectedValue中得到了正確的值嗎? – Mainak
@CST它來自ViewState。這部分代碼也在工作。 –