如何在C#Windows窗体中设置ComboBox的选定项?

我试图在DataGrid的click事件上设置comboBox选定项目,但我不能。 我用Google搜索并尝试了不同的方法但没有成功。

对于我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; } 

您可以通过.Items.IndexOf()方法获取项目索引。 试试这个:

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

您不需要迭代。

您可以在Stack Overflow问题中找到更多信息如何在comboBox中设置所选项以使用C#匹配我的字符串?

以下内容对我来说非常有用。 传递combobox中可用的任何值或文本。

 comboBox1.SelectedIndex = comboBox1.FindString(); 

你有它在你的if:

 cmbVendor.SelectedItem = cmbVendor.Items[i]; 

最后我发现了它。 它的:

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

SelectedText属性用于combobox的文本框部分中可编辑文本的选定部分。

假设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") ,而您只需要一个。

建议的“comboBox1.Items.IndexOf(”假定cmbVendor.Items的内容cmbVendor.Items

我遇到了类似的问题,并在此处借助其他答案进行了部分解决。 首先,我的特殊问题是

 combobox1.SelectedItem = myItem; 

没有按预期工作。 根本原因是myItem是一个组中的一个对象,它实际上与combobox中的项目相同,但它实际上是这些项目的副本。 所以myItem与有效条目相同,但它本身不是来自combobox1容器的有效对象。

解决方案是使用SelectedIndex而不是SelectedItem,如下所示:

 combobox1.SelectedIndex = get_combobox_index(myItem); 

哪里

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

如果您为ComboBox控件设置了ValueMember属性,则可以简单地将Value赋值给ComboBox控件的SelectedValue属性。 您不必显式找到索引。 这是一个例子:

 public class Vendor{ public int VendorId {get; set;} public string VendorName {get; set;} } // Inside your function var comboboxData = new List(){ 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; 

这对我有用…..

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