2012-02-22 12 views
6

DataGridのクリックイベントでcomboBoxの選択項目を設定しようとしましたが、できませんでした。私はグーグルで、さまざまな方法で試しましたが、成功しませんでした。C#WindowsフォームでComboBoxの選択項目を設定するには?

私にとってSelectedIndexは動作していますが、ComboBoxでアイテムのインデックスが見つかりませんでしたので、アイテムを選択できませんでした。

ない作業コード:

for (int i = 0; i < cmbVendor.Items.Count; i++) 

    if (cmbVendor.Items[i].ToString() == Convert.ToString(gridView1.GetFocusedRowCellValue("vVendor"))) 
    { 
     cmbVendor.SelectedIndex = i; 
     break; 
    } 
+0

は、あなたが選択したい項目には.text/.Valueのを(1つのコンボボックスが使用する覚えていない)に設定したことがありますか? –

+0

IF文が実行されませんか? – Tigran

+0

ID、値(任意の主キー)を含むクラスのリストを使用して、コンボデータソースを埋める。次に、selectedvalueプロパティを使用する。cmbVendor.SelectedValue –

答えて

12

。試してみてください:

comboBox1.SelectedIndex = comboBox1.Items.IndexOf(gridView1.GetFocusedRowCellValue("vVendor")); 

繰り返しは必要ありません。

詳細については、スタックオーバーフローの質問How do I set the selected item in a comboBox to match my string using C#?を参照してください。

+0

申し訳ありません... indexOfが-1を返しても、gridviewは現在の文字列を返します – Azhar

+0

これは何か問題があります:gridView1.GetFocusedRowCellValue( "vVendor")。 – Kamil

4

にあなたはそれを持っているあなたの場合:あなたは.Items.IndexOf()法によるアイテムのインデックスを取得することができます

cmbVendor.SelectedItem = cmbVendor.Items[i]; 
+1

ループの必要がなくなりました。直接、.SelectedItemを 'Convert.ToString(gridView1.GetFocusedRowCellValue( "vVendor"))'に設定してください。 –

+0

申し訳ありません...実際にはif文は真ではありません – Azhar

1

gridView1.GetFocusedRowCellValue("vVendor")が実際に正常に動作すると仮定すると、次のコードで問題を解決する必要があります。

string selected = Convert.ToString(gridView1.GetFocusedRowCellValue("vVendor")); 
foreach (var item in cmbVendor.Items) 
{ 
    if (string.Compare(item.ToString(), selected, StringComparison.OrdinalIgnoreCase) == 0) 
    { 
     cmbVendor.SelectedItem = item; 
     break; 
    } 
} 

元のコードにはgridView1.GetFocusedRowCellValue("vVendor")が複数回コールされましたが、必要なのは1つだけです。

ザ・は「comboBox1.Items.IndexOfは(」cmbVendor.Itemsの内容についてはあまり想定して提案最後に

2

私はそれを見つけたことがあります:。。

cmbVendor.Text = Convert.ToString(gridView1.GetFocusedRowCellValue("vVendor")); 

SelectedTextプロパティが選択されたためでありますコンボボックスのテキストボックス部分の編集可能なテキストの部分。

11

以下は、私にとって完璧に働いています。コンボボックスで利用可能な値やテキストを渡してください。

comboBox1.SelectedIndex = comboBox1.FindString(<combobox value OR Text in string formate>); 
0

私は同様の問題を抱えていて、ここでは他の回答の助けを借りて部分的に解決しました。まず、私の問題は、

combobox1.SelectedItem = myItem; 

が期待どおりに機能していないことでした。根本的な原因は、myItemがコンボボックス内のアイテムと実質的に同じリストであったグループのオブジェクトであったことですが、実際はそれらのアイテムのコピーです。したがって、myItemは有効なエントリと同じですが、それ自体はcombobox1コンテナからの有効なオブジェクトではありませんでした。

ソリューションは、このように、代わりのSelectedItemのSelectedIndexをを使用していた:

private int get_combobox_index(ItemClass myItem) 
    { 
     int i = 0; 
     var lst = combobox1.Items.Cast<ItemClass >(); 
     foreach (var s in lst) 
     { 
      if (s.Id == myItem.Id) 
       return i; 

      i++; 
     } 
     return 0; 
    } 
-1

これが私の作品

combobox1.SelectedIndex = get_combobox_index(myItem); 

.....

string displayMember = ComboBox.DataSource.To<DataTable>().Select("valueMemberColumn = '" + value + "'")[0]["displayMember"].ToString(); 
ComboBox.FindItemExact(displayMember, true).Selected = true; 
+0

誰かが私のansが投票を停止する理由を教えてもらえますか? –

0

を使用すると、ComboBoxコントロールのためのValueMemberでプロパティを設定している場合、あなたは単にComboBoxコントロールのSelectedValueのプロパティに値をassingnすることができます。インデックスを明示的に検索する必要はありません。 はここに例を示します

public class Vendor{ 
    public int VendorId {get; set;} 
    public string VendorName {get; set;} 
} 

// Inside your function 
    var comboboxData = new List<Vendor>(){ 
     new Vendor(){ vendorId = 1, vendorName = "Vendor1" }, 
     new Vendor(){ vendorId = 2, vendorName = "Vendor2" } 
    } 

    cmbVendor.DataSource = comboboxData; 
    cmbVendor.DisplayMember = "VendorName"; 
    cmbVendor.ValueMember = "ValueId"; 

// Now, to change your selected index to the ComboBox item with ValueId of 2, you can simply do: 
    cmbVendor.SelectedValue = 2; 
関連する問題