【问题标题】:What class to use for lookup value?什么类用于查找值?
【发布时间】:2013-07-07 20:43:05
【问题描述】:

我正在构建一个 C# windows 窗体,它显示一个列表框,其中包含一些可供用户选择的项目。该选择将确定查询的标准。该查询将返回 2 个字段,一个 ID 和一个描述。我想在表单的第二个列表框中显示描述,但如果在列表框中选择了该描述,则使用 ID 进行后续处理。

以下是有关我正在尝试做的事情的更多详细信息:

ListBox1
Accessories
Men's
Women's
Children

当用户选择“附件”时,查询运行并返回:

1234   Belts
2345   Scarves
4566   Handbags

ListBox2 显示描述

Belts
Scarves
Handbags

但是当用户双击腰带时,我想将 1234 添加到类实例中的字段中。我应该将查询的结果放入什么样的列表中,以便我可以使用它来将项目添加到我的列表框中并且仍然能够知道 ID?

谢谢! 莱斯利

【问题讨论】:

    标签: c# winforms list


    【解决方案1】:

    在.NET 列表框中,项目列表不仅仅是字符串列表,而是对象。组件将使用对象的字符串值进行显示,但您可以在查看所选值时引用 ID。

    这样定义一个类

    class Choices
    {
       public string Name;
       public int ID;
    
       public override string ToString()
       {
          return name;
       }
    }
    

    用这个类的实例填充列表,你应该很高兴。

    【讨论】:

      【解决方案2】:

      WinForms 和 WPF 都非常灵活。只需将 Accessory 对象添加到 Items 属性即可。或者将 DataSource 设置为现有列表。

      默认显示是通过ToString(),但您可以将 DisplayMember 设置为特定属性的名称。

      您可以通过 SelectedItem 获取整个对象。和/或设置 ValueMember 并读取 SelectedValue。

      【讨论】:

      • 除了附件不是对象...它只是我添加到列表框项目的查询条件。我对您所说的“将 DataSource 设置为现有列表”更感兴趣。我该怎么做?
      • 我假设数据最终在某个地方......在 DataTable 或其他地方。 List<> 或 DataTable 可以直接分配给 DataSource。使用 BindingSource(如 Delphi 的 TDataSource)是可选的。
      • 好的,我会尝试解决这个问题...我想我正在努力解决如何为相同的事物分配 2 个值,并在一个地方使用一个,另一个在另一个地方使用,而无需创建类似的类建议如下。
      • 绑定到数据表(将组合框数据源设置为您的数据集),将 DisplayMember 设置为描述的字段名,将 ValueMember 设置为键的字段名。
      猜你喜欢
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-15
      • 1970-01-01
      • 2012-05-12
      相关资源
      最近更新 更多