在数据绑定comboBox中搜索?

时间:2014-02-18 07:42:07

标签: c# database winforms combobox

伙计我有一个comboBox配置为像dropdownlist一样工作。它正在通过数据库填充。它运作完美。

现在我想做的是: 例如,我有comboBox从数据库表“tblPersons”获取“Names”列并显示它。 if,例如,数据库表“tblPersons”

中总共有4个条目
  1. Ali Khan
  2. Ahmed Khan
  3. Bilal Khan
  4. Bilal Farooqi
  5. 所以当我在comboBox中写“Ahmed Farooqi”时(comboBox应该是可编辑的,一旦我写了“Ahmed”,它应该显示名字为“Ahmed”的所有条目)并按回车键,它应该在数据库表“tblPersons”中搜索 - 如果找到“Ahmed Farooqi” - 它应该选择它,如果找不到“Ahmed Farooqi” - 它应该询问我是否要在数据库表“tblPersons”中创建新条目,如果我点击“是”它应该打开另一个添加新人的表格,如果我点击“否”,它就什么也不做。

    我该怎么办?我是C#的新手,所以非常感谢任何帮助。如果我的问题不清楚,我道歉。

    问候。

    编辑:这是我的测试表单,这里我是一个用于输入名称的文本框,文本框应该在数据库中搜索名称,然后如果找到名称,则在各自的文本框中显示来自数据库的编号和电子邮件。如果未找到,则应显示消息框,要求用户创建新人,如果单击是,则切换到另一个表单(用户将创建新人)。

    enter image description here

1 个答案:

答案 0 :(得分:0)

在表单加载中调用fillCombo函数,并将cmb_SelectedValueChanged事件分配给组合框。不要忘记将autocompletemode属性设置为组合框。

cmb.AutoCompleteMode = AutoCompleteMode.SuggestAppend


private void fillCombo()
{
    string sql = "SELECT ID, NAME, Number, Email FROM tblPerson";
    SqlConnection Cnn = new SqlConnection("connections string");
    Cnn.Open();

    SqlDataAdapter da = new SqlDataAdapter(sql, Cnn);
    DataTable dt = new DataTable();
    da.Fill(dt);

    cmb.ValueMember = "ID";
    cmb.DisplayMember = "Name";
    cmb.DataSource = dt;    
}

private void cmb_SelectedValueChanged(object sender, EventArgs e)
{
    if (cmb.SelectedItem != null)
    {
        txtNumber.Text = ((DataRow)cmb.SelectedItem)["Number"].ToString();
        txtEmail.Text = ((DataRow)cmb.SelectedItem)["Email"].ToString();
    }
}

private void cmb_Validating(object sender, CancelEventArgs e)
{
    if (cmb.SelectedItem == null)
    {
        If (MessageBox.Show("Do you want to create a new person?", MessageBoxButtons.YesNo) == DialogResult.Yes)
        {
            frmNewPerson person = new frmNewPerson();
            person.Name = cmb.Text;
            if (person.ShowDialog() == DialogResult.Yes)
            {
                fillCombo();
                DataRow dr = ((DataTable)cmb.DataSource).Select("Name='" + person.Name + "'")[0];
                cmb.SelectedValue = Convert.ToInt32(dr["ID"]);
            }
        }
        else
        {
            txtNumber.Text = string.Emtpy;
            txtEmail.Text = string.Emtpy;
        }
    }
}