有些对象具有OrderNanme,OrderCode等属性,以及当前我在HashSet中插入它们的许多其他属性(它们是唯一的,因此在我的场景中可以找到使用“set”)。
然后代码中的其他地方我很难通过这个HashSet并将这些对象的OrderName添加到一个combobx中,这样用户就可以在combobbx中看到这些名称。
现在我还有一个OrderCode,如果它匹配那些HashSet项目中的任何订单代码,那么我希望在该订单上设置Combobx的默认文本,当然我们仍然填充整个项目combobx ......我有没有办法一次性做到这一点?我想我需要另外一个foreach,并找到该项目的位置,并将其索引设置为combbox的选定索引但是有更短的方法吗?
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?
答案 0 :(得分:1)
如果您不打算以某种方式对组合内容进行排序,则实际上可以在foreach
迭代本身期间找到索引。例如:
int currentComboIndex = 0;
foreach(CustomerOrderClass item in cntrlr.ThatHashSet)
{
comboBox.Item.Add( item.OrderName)
if(orderCode == item.OrderCode)
currentComboIndex ++;
}
退出周期后,您将获得或0
或最后项的索引等于指定的orderCode
(顺便说一下,可以0
),所以你可以在循环后做:
comboBox.SelectedIndex = currentComboIndex;
答案 1 :(得分: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;
}
}