在数据库中创建新表后刷新comboBox

时间:2016-11-16 21:02:50

标签: c# sql winforms

在我的代码中,我创建了一个表并将CSV文件导出到该表中。在我的代码的另一部分中,comboBox填充了我的数据库中的表名。如下所示:

private void FillCombo()
    {
        try
        {

            string connectionString = "Data Source=LPMSW09000012JD\\SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True";
            using (SqlConnection con2 = new SqlConnection(connectionString))
            {
                con2.Open();
                string query = "SELECT * FROM INFORMATION_SCHEMA.TABLES ";
                SqlCommand cmd2 = new SqlCommand(query, con2);

                SqlDataReader dr2 = cmd2.ExecuteReader();
                while (dr2.Read())
                {
                    int col = dr2.GetOrdinal("TABLE_NAME");
                    comboBox1.Items.Add(dr2[col].ToString());
                }

            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }

我们想要实现的是刷新comboBox以反映通过上述函数执行的新添加的表。首先想到的是创建一个按钮并重写上面的函数:

 private void button1_Click_1(object sender, EventArgs e)
    {
        //this is where I would just rewrite the contents of the above function
    }

正如您所猜测的那样,它可以正常工作,但价值观是重复的。如何在不复制现有信息的情况下刷新comboBox?

1 个答案:

答案 0 :(得分:3)

正如我在评论中提到的,您可以在调用方法之前清除项目,

combobox.Items.Clear();

或者你可以像这样在while循环中添加If语句,

while (dr2.Read())
{
      int col = dr2.GetOrdinal("TABLE_NAME");
      if (!comboBox1.Items.Contains(dr2[col].ToString()))
      {
          comboBox1.Items.Add(dr2[col].ToString());
      }
}

因此,您无需在每次召回时清除物品。

希望有所帮助,