Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / C#

How Do I Put Display and Value in Combobox/Listbox Separately?

3.70/5 (31 votes)
15 Jun 2007CPOL2 min read 1   761  
This article demonstrates how to use object as items in combobox and listbox and manipulate them.

Screenshot - ComboBoxDemo1.png

Screenshot - ComboBoxDemo2.png

Introduction

This article demonstrates two easy ways to use separate display and value for listbox control and combobox control. These controls take type object entities for items. Here it is demonstrated how to manipulate this to get the desired result.

Background

Several times, people come to me saying that they want to display some value in a combobox and on selection, they want to retrieve some other value which is not visible to the user. I found most of the beginners face trouble in this scenario. So I thought why not put this solution on The Code Project so that a beginner user can resolve this common problem.

Basic Idea

When an object is added as an item to these controls, these controls call the ToString() method to get the display. So one can easily manipulate the fact that when one adds object as Item then control will get display text from the Object's ToString() method but item still maintains state of that object. So these items can be used to retrieve the entire object as it is. The second approach is simply binding the DataSource to the control and setting the column names for display and value purposes. The noticeable point is you can have a DataTable with large number of columns out of which one column can be used to display text and one column can be used for value member.

Using the Code

The code is pretty simple and self explanatory. ItemObject is the class which plays the role of giving display text to the control.

C#
public class ItemObject
{
    private string key;
    private object valueOfKey;

    /// <summary>
    /// Overloaded constructor.
    /// </summary>
    /// <param name="key">Key of object.</param>
    /// <param name="valueOfKey">Value of object.</param>
    public ItemObject(string key, object valueOfKey)
    {
        this.key = key;
        this.valueOfKey = valueOfKey;
    }

    /// <summary>
    /// Default constructor
    /// </summary>
    public ItemObject()
    {
        key = string.Empty;
        valueOfKey = string.Empty;
    }

    ///<summary>
    ///Returns a <see cref="T:System.String"></see> that represents the current 
    ///<see cref="T:System.Object">
    /// </see>.
    ///</summary>
    ///
    ///<returns>
    ///A <see cref="T:System.String"></see> that represents the current 
    ///<see cref="T:System.Object">
    /// </see>.
    ///</returns>
    public override string ToString()
    {
        return key;
    }

    ///<summary>
    ///Serves as a hash function for a particular type. 
    ///</summary>
    ///
    ///<returns>
    ///A hash code for the current <see cref="T:System.Object"></see>.
    ///</returns>
    public override int GetHashCode()
    {
        return ToString().GetHashCode();
    }

    /// <summary>
    /// Gets or sets Key of object.
    /// </summary>
    public string Key
    {
        get { return key; }
        set { key = value; }
    }

    /// <summary>
    /// Gets or sets Value of object.
    /// </summary>
    public object ValueOfKey
    {
        get { return valueOfKey; }
        set { valueOfKey = value; }
    }
}

Points of Interest

ItemObject class is the container object for the above class. You can design your own container object for your requirement.

ToString() method is the key here so whenever ToString() is called from an application, it will return the Key of the object. This solves the display purpose. So simple!!!

You can use other types of DataSource also with these controls.

History

  • 16th June, 2007: First release of the code

If you like an article like this which solves a simple development problem, please give feedback.

About Proteans Software Solutions

Proteans is an outsourcing company focusing on software product development and business application development on Microsoft Technology Platform. Proteans partners with Independent Software Vendors (ISVs), System Integrators and IT teams of businesses to develop software products. Our technology focus and significant experience in software product development - designing, building, and releasing world-class, robust and scalable software products help us to reduce time-to-market, cut costs, reduce business risk and improve overall business results for our customers. Proteans expertise's in development using Microsoft .NET technologies.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)