【问题标题】:How to check text of combobox with database column's value如何使用数据库列的值检查组合框的文本
【发布时间】:2017-08-12 17:08:03
【问题描述】:

我是编程新手,这可能是一项简单的任务,但我面临着困难。

我在 Windows 窗体中有一个组合框,它与 SQL Server 中名为 id 的表列链接。我想检查在组合框中输入的值是否存在于列中。如果是,则进一步工作,如果不是,则向用户发送错误消息,无论用户按 Enter、Tab 还是 Selection changed 都应该有效。

填充组合框的代码

         sqlCmd.Connection = con;
         sqlCmd.CommandType = CommandType.Text;
        sqlCmd.CommandText = "SELECT pid FROM report2";
        System.Data.SqlClient.SqlDataAdapter sqlDataAdap = new
           System.Data.SqlClient.SqlDataAdapter(sqlCmd);                                                                                                                                                                                                               
        DataTable dtRecord = new DataTable();
        sqlDataAdap.Fill(dtRecord);
        comboBox1.DataSource = dtRecord;
        comboBox1.ValueMember = "pid";
        con.Close();

*** id 是字母数字。

提前致谢

到目前为止,我已经完成了这项工作,但是我收到了所有多次计时的错误消息,即使它们在项目列表中的值匹配...

 for (int i = 0; i <= comboBox1.Items.Count-1; i++)

        {

            if (comboBox1.Text.Equals(comboBox1.GetItemText(comboBox1.Items[i]).ToString()))

            {
                con.Open();
                string sql = "SELECT * FROM report2 where partno='" + comboBox1.Text + "'";
                System.Data.SqlClient.SqlDataAdapter dataadapter = new System.Data.SqlClient.SqlDataAdapter(sql, con);
                DataSet ds = new DataSet();

                dataadapter.Fill(ds, "report2");
                dataGridView1.DataSource = ds;
                dataGridView1.DataMember = "report2";
                dataGridView1.ReadOnly = false;

                con.Close();
            }

            else
            {
                MessageBox.Show("enter valid value for for loop");
            }

【问题讨论】:

  • 请贴出您目前尝试过的代码。
  • 请给我们看一些代码。您如何保留列值?是列表/数组/字典吗?
  • @mukul,我更新了我的问题。希望现在你会理解它。如果有任何疑问,请告诉我。谢谢..

标签: c# sql-server winforms combobox


【解决方案1】:

这可能是你的解决方案。

首先,获取最近才选择的组合框值。

然后,假设您使用的是 EF,请使用组合框选择的 id 检查数据库。

最后,如果没有这样的 id,则显示消息并且不执行任何操作,或者如果表中有这样的 id,则继续执行您的逻辑

private void yourCombobox_SelectedValueChanged(object sender, EventArgs e){
    int selectedComboboxId = yourCombobox.SelectedValue;

    bool recordExists = _context.Set<YourEntity>().Any(x=>x.Id = selectedComboboxId);

    if(recordExists){
        //record is in the table
        //your code
    }
    else 
    {
        //record is not in the table
        MessageBox.Show("Record does not exist. Select new option.")
    }
}

【讨论】:

【解决方案2】:

您可以将combobox 设置为dropdownlist。这将限制用户向combobox 输入任何新值,因此您不需要向用户显示错误消息。

试试下面,

sqlCmd.Connection = con;
sqlCmd.CommandType = CommandType.Text;
sqlCmd.CommandText = "SELECT pid FROM report2";
System.Data.SqlClient.SqlDataAdapter sqlDataAdap = new
   System.Data.SqlClient.SqlDataAdapter(sqlCmd);                                                                                                                                                                                                               
DataTable dtRecord = new DataTable();
sqlDataAdap.Fill(dtRecord);
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList; //this statement added
comboBox1.DataSource = dtRecord;
comboBox1.ValueMember = "pid";
con.Close();

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-01-10
  • 2015-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多