Enhanced List Box Control






4.71/5 (38 votes)
Sep 8, 2004
3 min read

232766

6040
Enhanced List Box Control
Introduction
An article about the basics of Listbox
control and the operations that can be done
using simplified code.
Background
MSDN Library Web Server Controls
Using the code
About ListBox
Control
The controls that are used to List the data in Asp.Net are :
CheckBoxList
DropDownList
ListBox
RadioButtonList
We are about to concentrate on ListBox
Control.
The Namespace Hierarchy
System.Object
System.Web.UI.Control
System.Web.UI.WebControls.WebControl
System.Web.UI.WebControls.ListControl
Important Properties and Methods
About ListBox
class
Properties:
DataSource |
A data source that provides data for populating the list control. |
DataMember |
A string that specifies a particular table in the DataSource . |
DataTextField |
A data that specifies the field of the data source that provides the text content of the list items. |
DataValueField |
A data that specifies the field of the data source that provides the value of each list item. |
SelectionMode |
The ListSelectionMode enumeration represents the selection mode of the
ListBox
control that determines whether a user can select multiple items or just a
single item. |
SelectedItem |
It represents the selected item with the lowest index in the list control. |
SelectedIndex |
It represents the lowest ordinal index of the selected items in the list. |
SelectedValue |
It represents the value of the selected item in the list control. |
About ListItemCollection
Class
The ListItemCollection
class represents a collection of
ListItem
objects. The ListItem
objects represent the items displayed in list controls.
Properties :
ListItemCollection.Count |
It gets the number of ListItem objects in the collection. |
ListItemCollection.Item |
It Gets a ListItem at the specified index in the collection. |
Methods:
Add
AddRange
Remove
RemoveAt
Clear
Insert
About ListItem Class
AListItem
control represents an individual data item within a data-bound list
control
Eg., <asp:ListItem Value="1" Text="Item
1">Sample Item 1</asp:ListItem>
Properties :
ListItem.Selected |
It Gets or sets a value indicating whether the item is selected. |
ListItem.Text |
The text displayed in a list control for the item represented by the Listitem. |
ListItem.Value |
The value associated in a list control for the item represented by the ListItem. |
Functions
TheAddRemoveAll
function inserts all items from the Source
Listbox to the Target Listbox and removes all items in the Source Listbox. It
is a generalised function and you can specify the source and target Listbox
according to your need.
private void AddRemoveAll(ListBox aSource, ListBox aTarget)
{
try
{
foreach(ListItem item in aSource.Items)
aTarget.Items.Add(item);
aSource.Items.Clear();
}
catch(Exception expException)
{
Response.Write(expException.Message);
}
}
The AddRemoveItem
function inserts the selected item from the
Source Listbox to the Target Listbox and removes the item in the Source
Listbox. It is also a generalised function and you can specify the source and
target Listbox according to your need.
private void AddRemoveItem(ListBox aSource, ListBox aTarget)
{
ListItemCollection licCollection;
try
{
licCollection = new ListItemCollection();
for(int intCount=0;intCount < aSource.Items.Count;intCount++)
{
if(aSource.Items[intCount].Selected==true)
licCollection.Add(aSource.Items[intCount]);
}
for(int intCount=0;intCount < licCollection.Count;intCount++)
{
aSource.Items.Remove(licCollection[intCount]);
aTarget.Items.Add(licCollection[intCount]);
}
}
catch(Exception expException)
{
Response.Write(expException.Message);
}
finally
{
licCollection = null;
}
}
The MoveUp
function moves the selected item to a position above.
When you want to store the items from the ListBox by rearranging the selected
items you can just loop the items and save it. The data of the selected item.
Then it removes the selected item from its current position and inserts it a
position above. The loop goes only till the selected item so the other items
will not be looped. Hence improving the performance.
private void private void MoveUp(ListBox lstBox)
{
int iIndex, iCount, iOffset, iInsertAt,iIndexSelectedMarker = -1;
string lItemData,lItemval;
try
{
// Get the count of items in the list control
iCount = lstBox.Items.Count;
// Set the base loop index and the increment/decrement value based
// on the direction the item are being moved (up or down).
iIndex = 0;
iOffset = -1;
// Loop through all of the items in the list.
while(iIndex < iCount)
{
// Check if this item is selected.
if(lstBox.SelectedIndex > 0)
{
// Get the item data for this item
lItemval =lstBox.SelectedItem.Value.ToString();
lItemData = lstBox.SelectedItem.Text.ToString() ;
iIndexSelectedMarker=lstBox.SelectedIndex;
// Don't move selected items past other selected items
if(-1 != iIndexSelectedMarker)
{
for(int iIndex2 = 0; iIndex2 < iCount; ++iIndex2)
{
// Find the index of this item in enabled list
if(lItemval == lstBox.Items[iIndex2].Value.ToString())
{
// Remove the item from its current position
lstBox.Items.RemoveAt(iIndex2);
// Reinsert the item in the array one space higher
// than its previous position
iInsertAt=(iIndex2 + iOffset)<0?0:iIndex2+iOffset;
ListItem li= new ListItem(lItemData,lItemval);
lstBox.Items.Insert(iInsertAt,li);
break;
}
}
}
}
// If this item wasn't selected save the index so we can check
// it later so we don't move past the any selected items.
else if(-1 == iIndexSelectedMarker)
{
iIndexSelectedMarker = iIndex;
break;
}
iIndex = iIndex + 1;
}
if(iIndexSelectedMarker==0)
lstBox.SelectedIndex=iIndexSelectedMarker;
else
lstBox.SelectedIndex=iIndexSelectedMarker-1;
}
catch(Exception expException)
{
Response.Write(expException.Message);
}
}
The MoveDown
function moves the selected item to a position below.
The data of the selected item. Then it removes the selected item from its
current position and inserts it a position below.
private void MoveDown(ListBox lstBox)
{
try
{
int iIndex, iCount, iOffset, InsertAt,iIndexSelectedMarker = -1;
string lItemData;
string lItemval;
// Get the count of items in the list control
iCount = lstBox.Items.Count;
// Set the base loop index and the increment/decrement value based on
// the direction the item are being moved (up or down).
iIndex = iCount - 1;
iOffset = 1;
// Loop through all of the items in the list.
while(iIndex >= 0)
{
// Check if this item is selected.
if(lstBox.SelectedIndex >= 0)
{
// Get the item data for this item
lItemData = lstBox.SelectedItem.Text.ToString();
lItemval =lstBox.SelectedItem.Value.ToString();
iIndexSelectedMarker=lstBox.SelectedIndex;
// Don't move selected items past other selected items
if(-1 != iIndexSelectedMarker)
{
for(int iIndex2 = 0; iIndex2 < iCount-1; ++iIndex2)
{
// Find the index of this item in enabled list
if( lItemval == lstBox.Items[iIndex2].Value.ToString())
{
// Remove the item from its current position
lstBox.Items.RemoveAt(iIndex2);
// Reinsert the item in the array one space lower
// than its previous position
iInsertAt=(iIndex2+iOffset) < 0?0:iIndex2+iOffset;
ListItem li = new ListItem(lItemData,lItemval);
lstBox.Items.Insert(iInsertAt,li);
break;
}
}
}
}
iIndex = iIndex - 1;
}
if(iIndexSelectedMarker==lstBox.Items.Count-1)
lstBox.SelectedIndex=iIndexSelectedMarker;
else
lstBox.SelectedIndex=iIndexSelectedMarker+1;
}
catch(Exception expException)
{
Response.Write(expException.Message);
}
}
Points Of Interest
The Article can be extended with databinding features. The Databinding can be done from the Database with theDatasource
, DataTextField
and
Datavaluefield
properties set. For simplification for beginners I have added the items in
design time.
History
- Version 1.0, September 2004.