Learning Learning - 3 months ago 43
ASP.NET (C#) Question

Listbox in asp.net not getting selected items

I have multiple dropdown & listbox in my webpage.

I am trying to get a list of

CategoryID
from a
lstCatID
listbox i am able to populate the listbox with category name.

If i remember correctly in first attempt my code worked fine, after that i made some change then it stated to always get the first item selected x No. of time

<asp:ListBox ID="lstCatID" runat="server" DataTextField="CategoryName"
DataValueField="CategoryID" SelectionMode="Multiple" CssClass="lstListBox">
</asp:ListBox>



protected void Button1_Click(object sender, EventArgs e)
{
string CatID = string.Empty;
foreach (ListItem li in lstCatID.Items)
{
if (li.Selected == true)
{
// Response.Write();
CatID += lstCatID.SelectedItem.Value + ",";
}
}
Response.Write(CatID);
}


I am not sure what is going wrong i checkd MSDN it show exactly the same way of doing it.

May be i am doing something wrong.

Just to add using firefox i am able to see multiple selected value have selected property.

<option value="3" selected="selected">One</option>
<option value="2">Two</option>
<option value="29" selected="selected">Three</option>
<option value="25" selected="selected">Four</option>
<option value="22" >Five</option>


My output in this case will be
3,3,3


I would appreciate help in this regard

Answer

You are setting it to the same value every time:

foreach (ListItem li in lstCatID.Items)
{
    if (li.Selected == true)
    {
       // you are always using lstCatID.SelectedItem.Value.
        CatID += lstCatID.SelectedItem.Value + ",";
    }
}

When you actually want the value of the item in your loop that is selected:

foreach (ListItem li in lstCatID.Items)
{
    if (li.Selected == true)
    {
        // get the value of the item in your loop
        CatID += li.Value + ",";
    }
}
Comments