Click here to Skip to main content
15,867,330 members
Articles / Web Development / ASP.NET
Article

Enhanced List Box Control

Rate me:
Please Sign up or sign in to vote.
4.71/5 (41 votes)
7 Sep 20043 min read 229.4K   6K   121   15
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 :

  1. CheckBoxList
  2. DropDownList
  3. ListBox
  4. 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:

  1. Add
  2. AddRange
  3. Remove
  4. RemoveAt
  5. Clear
  6. Insert

About ListItem Class

A ListItem 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

The AddRemoveAll 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.
C#
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.
C#
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.
C#
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.
C#
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 the Datasource, DataTextField and Datavaluefield properties set. For simplification for beginners I have added the items in design time.

History

  • Version 1.0, September 2004.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
India India
Microsoft Certified Professional.Working as a Software Engineer for past 3+ years in .NET technology. Has experience in Visual C#.NET,VB.NET,Microsoft BizTlak Server 2004,ASP.NET,ADO.NET,XML Web Services,XML,ASP,JavaScript and SQL Server 2000.

Comments and Discussions

 
GeneralThis isn't Pin
Dewey13-Oct-07 12:24
Dewey13-Oct-07 12:24 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.