1

有些对象具有诸如 OrderNanme、OrderCode 之类的属性,以及我目前将它们插入到 HashSet 中的许多其他属性(它们是唯一的,因此在我的场景中可以找到使用“集合”)。

然后在代码中的其他地方我枚举这个 HashSet 并将这些对象的 OrderName 添加到组合框,以便用户可以看到组合框中的名称。

现在我还有一个 OrderCode,如果它与那些 HashSet 项目中的任何订单代码匹配,那么我希望在该订单上设置组合框的默认文本,当然我们仍然在组合框中填充整个项目。 .. 有没有办法一次性做到?我想我需要另一个 foreach 去查找该项目在哪里并将其索引设置为组合框的选定索引,但有更短的方法吗?

double defaultOrder = GiveMeDefaulyOrder() ; // ok so some order number we have here.

foreach(CustomerOrderClass item in cntrlr.ThatHashSet)
{
    comboBox.Item.Add( item.OrderName)
}

//  Now do I need another foreach to just go and find that defaultOrder and set its defaultIndex...but is there a shorter way for this?
4

2 回答 2

1

我以组合框的DataSource绑定一个简单的HashSet为例。
此代码需要使用一些 Linq 表达式,但不需要循环将 Order 项添加到组合框。

public partial class Form1 : Form
{
    HashSet<Order> list = new HashSet<Order>();

    public Form1()
    {
        InitializeComponent();
        LoadData();
        comboBox1.DisplayMember = "OrderName";
        comboBox1.ValueMember = "OrderNum";
        comboBox1.DataSource = list.ToArray<Order>();
    }

    private void LoadData()
    {
        // Load some sample data
        for(int x = 0; x < 10; x++)
        {
            Order o = new Order(){OrderName = "Name" + x, OrderNum = x};
            list.Add(o);
        }
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // Select the item with order number = 4 
        var x = list.Where<Order>(o => o.OrderNum == 4).FirstOrDefault<Order>();
        comboBox1.SelectedItem = x;

    }
}

public class Order
{
    public string OrderName;
    public int OrderNum;
    public override string ToString()
    {
        return this.OrderName;
    }
}
于 2012-09-25T15:32:13.493 回答
1

如果您以后不打算以某种方式对组合内容进行排序,则实际上可以在foreach迭代本身期间找到索引。例如:

int currentComboIndex = 0;
foreach(CustomerOrderClass item in cntrlr.ThatHashSet)
{
    comboBox.Item.Add( item.OrderName)
    if(orderCode == item.OrderCode)
        currentComboIndex ++;
}

退出循环后,您将获得或或等于指定的最后0一项的索引(可以顺便说一句),因此您可以在循环后执行以下操作:orderCode0

comboBox.SelectedIndex = currentComboIndex;
于 2012-09-25T15:09:35.223 回答