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.
public class ItemObject
{
private string key;
private object valueOfKey;
public ItemObject(string key, object valueOfKey)
{
this.key = key;
this.valueOfKey = valueOfKey;
}
public ItemObject()
{
key = string.Empty;
valueOfKey = string.Empty;
}
public override string ToString()
{
return key;
}
public override int GetHashCode()
{
return ToString().GetHashCode();
}
public string Key
{
get { return key; }
set { key = value; }
}
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.