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.
Figure-01 Expectingf 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
CodeGain so that a beginner user can resolve this common problem. Figure-02 Samples 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 CodeThe code is pretty simple and self explanatory. ItemObject is the class which plays the role of giving display text to the control. Code Snippetpublic 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; }
}
}
Willing to ShareItemObject 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. Project Samples Download Demo files -23 kb Download source files -23 kb |