代码之家  ›  专栏  ›  技术社区  ›  tom.dietrich

在.net组合框中显示一个值并存储另一个值的最佳方式是什么?

  •  2
  • tom.dietrich  · 技术社区  · 17 年前

    我似乎找不到一种简单易用的.net本机方法来让.net winforms上的组合框显示一个值,并根据选择返回另一个值,而不创建自己的helper类,因为winforms将在放入其中的对象上显示ToString方法。

    我现在就是这样做的,非常笼统。首先,创建helper类。

     Public Class ListItem
         Public Value As Object
         Public DisplayString As String
    
         Public Sub New(ByVal NewValue As Object, ByVal NewDisplayString As String)
             Value = NewValue
             DisplayString = NewDisplayString
         End Sub
    
         Public Overrides Function ToString() As String
             Return DisplayString
         End Function
     End Class
    

        For Each o as WhateverObject In CollectionIwantToaddItemsFrom
            li = New ListItem(o.ValueToReturn, o.ValueToDisplay)
            Me.ComboBox1.Items.Add(li)
        Next
    

    最后,使用对象

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ComboBox1.SelectedIndexChanged
    if me.combobox1.selecteditem is nothing then exit sub
    Dim li As ListItem = me.ComboBox1.SelectedItem
    Dim o as object = li.value 
    'do stuff with o.
    end sub
    

    我确信在我仔细研究的框架中,有一些东西我更适合使用。这是怎么一回事?

    4 回复  |  直到 17 年前
        1
  •  6
  •   Sam Meldrum    17 年前

    这是一个小技巧,但它意味着您不必编写自己的名称-值对类-没什么大不了的(可能框架中已经有更好的东西了)。但是您可以使用DictionaryEntry类,它实际上是一个名称-值对。将这些项添加到列表中,然后使用组合框上的DataMember和ValueMember属性绑定到DictionaryEntry类的键和值属性。这样地:

        var list = new List<System.Collections.DictionaryEntry>();
        list.Add(new System.Collections.DictionaryEntry("one", 1));
        list.Add(new System.Collections.DictionaryEntry("two", 2));
        list.Add(new System.Collections.DictionaryEntry("three", 3));
    
        comboBox1.DataSource = list;
        comboBox1.DisplayMember = "Key";
        comboBox1.ValueMember = "Value";
    

    刚意识到你更喜欢vb方言。以下内容对VB也有相同的作用:-)

    Dim list As List(Of DictionaryEntry)
    
    list = New List(Of DictionaryEntry)
    list.Add(New DictionaryEntry("One", 1))
    list.Add(New DictionaryEntry("Two", 2))
    list.Add(New DictionaryEntry("Three", 3))
    
    ComboBox1.DataSource = list
    ComboBox1.DisplayMember = "Key"
    ComboBox1.ValueMember = "Value"
    
        2
  •  1
  •   John Rudy    17 年前

    由于对应用程序体系结构缺乏更好的理解,您可能正在采取一种好的方法。

    通常,我将组合框绑定到覆盖.ToString()方法的DAL对象。这提供了本质上相同的特性,尽管我必须将组合中选择的任何内容重新转换为其原始类型以获得“值”(通常是与实体的PK相对应的属性)。

        3
  •  0
  •   James Curran    17 年前

        4
  •  0
  •   Aaron Smith    17 年前

    我通常会创建一个datatable并将此datatable设置为combobox的数据源。然后我将DisplayMember设置为我想要显示的列,将ValueMember设置为我想要返回的值。除了数据表之外,可能还有更好的功能,但当我需要此功能时,我会使用这些功能。

    推荐文章