2012-02-22 103 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(无法记住哪一个ComboBox使用)设置为要选择的项目? – 2012-02-22 13:55:35

+0

您的IF语句是否执行? – Tigran 2012-02-22 13:56:08

+0

使用包含ID,值(任意主键),以填补组合数据源类的列表,然后使用SelectedValue属性:cmbVendor.SelectedValue – 2012-02-22 13:56:56

回答

12

您可以得到由.Items.IndexOf()方法您的项目索引。试试这个:

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 2012-02-23 07:37:43

+0

所以,什么是错的这个:gridView1.GetFocusedRowCellValue(“vVendor”)。 – Kamil 2012-02-23 18:00:39

4

你在拥有它你的,如果:

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

不再需要循环,直接将.SelectedItem设置为'Convert.ToString(gridView1.GetFocusedRowCellValue(“vVendor”))'我猜。 – 2012-02-22 13:58:37

+0

抱歉,没有工作......其实它不是真正的if语句 – Azhar 2012-02-23 07:38:41

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

的建议“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容器的有效对象。

的解决方案是使用的SelectedIndex代替的SelectedItem,像这样:

combobox1.SelectedIndex = get_combobox_index(myItem); 

其中

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

这对我的作品.....

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

有人可以告诉我为什么我的ans得到了投票吗? – 2017-11-16 11:06:23

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<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; 
相关问题