如何在组合框/列表框中分别放置显示值和实际值?






3.70/5 (31投票s)
本文演示了如何使用对象作为组合框和列表框中的项目并操作它们。
引言
本文演示了两种简单的方法,可以为列表框控件和组合框控件使用单独的显示值和实际值。 这些控件采用 object
类型的实体作为项目。 这里演示了如何操作它以获得所需的结果。
背景
很多人多次来找我说他们想在组合框中显示一些值,然后在选择时,他们想检索一些用户不可见的其他值。 我发现大多数初学者在这种情况下都会遇到麻烦。 所以我想为什么不把这个解决方案放在 Code Project 上,以便初学者可以解决这个常见问题。
基本思想
当将一个 object
作为项目添加到这些控件时,这些控件会调用 ToString()
方法来获取显示值。 因此,可以很容易地操作这样一个事实:当添加 object
作为项目时,控件将从 Object
的 ToString()
方法中获取显示文本,但项目仍然保持该 object
的状态。 因此,可以使用这些项目来检索整个 object
。 第二种方法是简单地将 DataSource
绑定到控件,并设置用于显示和值的列名。 值得注意的是,你可以拥有一个包含大量列的 DataTable
,其中一列可以用于显示文本,另一列可以用于值成员。
Using the Code
代码非常简单且具有自我解释性。 ItemObject
类充当向控件提供显示文本的角色。
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; }
}
}
关注点
ItemObject
类是上述类的容器对象。 您可以根据您的需求设计您自己的容器 object
。
ToString()
方法是这里的 key
,因此每当从应用程序调用 ToString()
时,它将返回 object
的 Key
。 这解决了显示问题。 非常简单!!!
您也可以将其他类型的 DataSource
与这些控件一起使用。
历史
- 2007 年 6 月 16 日:代码的首次发布
如果您喜欢这样解决简单开发问题的文章,请提供反馈。
关于 Proteans 软件解决方案
Proteans 是一家外包公司,专注于 Microsoft 技术平台上的软件产品开发和业务应用程序开发。 Proteans 与独立软件供应商 (ISV)、系统集成商和企业的 IT 团队合作开发软件产品。 我们在软件产品开发方面的技术重点和丰富经验 - 设计、构建和发布世界一流、稳健且可扩展的软件产品 - 帮助我们缩短上市时间、降低成本、降低业务风险并改善我们客户的整体业务成果。 Proteans 擅长使用 Microsoft .NET 技术进行开发。