1

OrderNanme、OrderCodeなどのプロパティを持つオブジェクトがあり、現在HashSetに挿入している他の多くのプロパティがあります(これらは一意であるため、「セット」の使用は私のシナリオで見つかります)。

次に、コードの別の場所で、このHashSetを使用して、これらのオブジェクトのOrderNameをcombobxに追加し、ユーザーがcombobbxで名前を確認できるようにします。

これで、これらのHashSetアイテムの注文コードのいずれかと一致するOrderCodeもあります。その場合、Combobxのデフォルトテキストをその注文に設定します。もちろん、Combobxのアイテム全体を入力します。 ..ワンショットでできる方法はありますか?そのアイテムがどこにあるかを見つけてそのインデックスをcombboxの選択されたインデックスに設定する別の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

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 に答える
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 に答える