Reputation: 101791
I have an ASP ListBox that has the SelectionMode set to "Multiple". Is there any way of retreiving ALL selected elements and not just the last one?
<asp:ListBox ID="lstCart" runat="server" Height="135px" Width="267px" SelectionMode="Multiple"></asp:ListBox>
Using lstCart.SelectedIndex
just returns the last element (as expected). Is there something that will give me all selected?
Upvotes: 22
Views: 70235
Reputation: 1065
try using this code I created using VB.NET :
Public Shared Function getSelectedValuesFromListBox(ByVal objListBox As ListBox) As String
Dim listOfIndices As List(Of Integer) = objListBox.GetSelectedIndices().ToList()
Dim values As String = String.Empty
For Each indice As Integer In listOfIndices
values &= "," & objListBox.Items(indice).Value
Next indice
If Not String.IsNullOrEmpty(values) Then
values = values.Substring(1)
End If
Return values
End Function
I hope it helps.
Upvotes: 0
Reputation: 751
use GetSelectedIndices method of listbox
List<int> selecteds = listbox_cities.GetSelectedIndices().ToList();
for (int i=0;i<selecteds.Count;i++)
{
ListItem l = listbox_cities.Items[selecteds[i]];
}
Upvotes: 2
Reputation: 96557
You can use the ListBox.GetSelectedIndices method and loop over the results, then access each one via the items collection. Alternately, you can loop through all the items and check their Selected property.
// GetSelectedIndices
foreach (int i in ListBox1.GetSelectedIndices())
{
// ListBox1.Items[i] ...
}
// Items collection
foreach (ListItem item in ListBox1.Items)
{
if (item.Selected)
{
// item ...
}
}
// LINQ over Items collection (must cast Items)
var query = from ListItem item in ListBox1.Items where item.Selected select item;
foreach (ListItem item in query)
{
// item ...
}
// LINQ lambda syntax
var query = ListBox1.Items.Cast<ListItem>().Where(item => item.Selected);
Upvotes: 63