9

この方法でコンボボックスにデータを入力しました

foreach (Control c in this.Controls)
{
     if (c is ComboBox)
     {
         (c as ComboBox).DataSource = DataSet1.Tables[0];
         (c as ComboBox).DisplayMember = "Articles";
     }
}

しかし、問題は、1 つのコンボで SelectedItem を変更すると、他のすべてのコンボで変更されますか?

4

3 に答える 3

15

それらをそれぞれ DataSet1.Table[0] の個別のインスタンスにバインドします。

すなわち)

foreach (Control c in this.Controls)
{
    if (c is ComboBox)
    {
        DataTable dtTemp = DataSet1.Tables[0].Copy();
        (c as ComboBox).DataSource = dtTemp 
        (c as ComboBox).DisplayMember = "Articles";
    }
}
于 2012-06-29T12:14:30.020 に答える
6

より良いアプローチは、データの重複を避けるためにDataViewを使用することです。また、回避できる場合は複数回唱えないでください。

foreach (Control c in this.Controls)
{
    ComboBox comboBox = c as ComboBox;

    if (comboBox != null)
    {        
        comboBox.DataSource = new DataView(DataSet1.Tables[0]);
        comboBox.DisplayMember = "Articles";
    }
}

編集

LINQ を使用すると、これをさらにクリーンに実行できることに気付きました

foreach (ComboBox comboBox in this.Controls.OfType<ComboBox>())
{
    comboBox.DataSource = new DataView(DataSet1.Tables[0]);
    comboBox.DisplayMember = "Articles";
}
于 2012-06-29T20:33:02.010 に答える