如何在c#中检查组合框中的用户输入

时间:2015-07-01 11:13:39

标签: c# winforms combobox sqldatareader

我有一个从名为class1的类填充的ComboBox 然后我从类中创建了名为obj的对象, 我使用SqlDataReader

combobox1.DataSource = obj.Myfunction();
combobox1.ValueMember = "ID";
combobox1.DisplayMember = "Name";

用户也可以在ComboBox中编写 我想检查用户输入是否在ComboBox项目中

if( comboBox1.Items.Contains(comboBox1.Text) )
   //do something
else
{
  MessageBox.Show("The comboBox1 contains new value");
}

但结果为假

我不想使用其他方法,如SqlDataAdapter

谢谢高级

更新

作为临时解决方案,我使用了此代码

int m = combobox1.SelectedIndex;
if (((class1)combobox1.Items[m]).Name.ToString() == combobox1.Text)
{
}
else
{
 MessageBox.Show("The comboBox1 contains new value");
}

再次感谢你

5 个答案:

答案 0 :(得分:1)

我的解决方案有点冗长,但这将解决您的问题

        int count = 0;
        for (int i = 0; i < comboBox1.Items.Count; i++)
        {
            string value = comboBox1.GetItemText(comboBox1.Items[i]);
            if (value.Contains(comboBox1.Text))
            {
                count++;
                break;
            }
        }

        if (count > 0)
        {
            //do something
        }
        else
        {
            MessageBox.Show("The comboBox1 contains new value");
        }

此代码非常简单易懂,但您可以使用LINQ来缩短代码。

答案 1 :(得分:0)

我猜这里,但我想从

返回的数据
obj.Myfunction();

(您设置为数据源的内容)不是List<string>,因此,在检查组合框的内部集合是否包含string(从comboBox1.Text返回)时,它不包含字符串而是包含对象。 由于这两者总是不同的(objectstring),因此总是错误的。

您是否尝试过将数据源设置为字符串列表?

答案 2 :(得分:0)

Items是ItemCollection而不是字符串列表。在您的情况下,它是一个ComboboxItem的集合,您需要检查其内容属性。

comboboxId.Items.Cast<ComboBoxItem>().Any(com=> com.Content.Equals("Your string"));

答案 3 :(得分:0)

我假设您使用类类型的List绑定到组合。

您应该对组合框的来源进行验证,如 -

        List<ClassType> cboSource = comboBox1.DataSource as List<ClassType>;
        var itemAlreadyThere = cboSource.Any(a => a.Name == comboBox1.Text);

        if (itemAlreadyThere)
        {
            MessageBox.Show("The comboBox1 contains old value");
        }
        //do something
        else
        {
            MessageBox.Show("The comboBox1 contains new value");
        }
  

作为建议,不要使用转换组合数据源,而是使用   私有变量,填充它,并将其用于绑定到组合   并进行验证

答案 4 :(得分:0)

几个月前我就有过这种行为。

我用类数据填充了一个组合框

class MyValue
{
  public string ID { get; set; }
  public string prop1 { get; set; }
  public string prop2 { get; set; }
  public int Value { get; set; }

  public static List<MyValue> Get()
  { 
    //create a list of MyValues and return it
    return new List<MyValue>();
  }
}
GUI中的

mycombo.ValueMember = "ID";
mycombo.DisplayMember = "prop1";
mycombo.DataSource = MyValue.Get();

之后我将selectedvalue作为财产:

public MyValue SelectedValue
{
  get
  {
    if(mycombo.SelectedValue is MyValue)
      return (MyValue)mycombo.SelectedValue);
    else
    {
      MessageBox.Show(string.Format("{0} as new value", mycombo.SelectedText));
      return new MyValue{prop1 = mycombo.SelectedText};
    }
  }
}