我目前正在从事图书管理项目,我正在使用来自 Visual studio 的 sql 服务器,我在数据库中有图书类别 table

Iam currently working on a book managment project and im using sql server from Visual studio, I have Book Category table in the data base

我目前正在从事图书管理项目,我正在使用来自 Visual Studio 的 SQL 服务器。我在数据库中有一个图书类别 table,我正试图将它放在一个组合框中。

这是代码 - 我没有发现任何问题,但是类别在组合框中显示的时间太长了。

而且列表是重复的,可能是因为 while 循环?如果有,有什么办法可以解决吗?

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                con.ConnectionString = (@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\malek\source\repos\BookStore\BookStore\BOOKDB.mdf;Integrated Security=True");
                scmd.Connection = con;
                con.Open();
                scmd.CommandText = "SELECT CATEGORY FROM BOOKCAT";
                var rd = scmd.ExecuteReader();
                while (rd.Read())
                {
                    List.Add(Convert.ToString(rd[0]));
                }
                int i = 0;
                while (i < List.LongCount())
                {
                    comboBox1.Items.Add(List[i]);
                    i = i + 1;
                }

            }
            catch (Exception EX)
            {

                MessageBox.Show(EX.Message);
            }
            finally
            {
                con.Close();
            }
        }

我错过了什么?

注意:我没有收到任何错误!!

根据您发布的代码,您似乎是在 comboBox1SelectedIndexChanged 事件中从数据库加载类别。

因此,每次您从 comboBox1 中选择一个新项目时,您都在执行这段代码;您将转到数据库并从 BOOKCAT table 加载所有内容,然后将这些项目放入 ListcomboBox1。这就是您看到重复类别的原因。这可能也是为什么一个类别在 ComboBox.

中显示需要很长时间的原因

您可能不希望每次选定的索引更改时都从数据库加载 ComboBox 项,因此您应该在其他地方执行此操作。例如,您可以在 Form 的构造函数或 'Load' event.

中执行此操作

How do you mean with data binding?

像这样

var da = new SqlDataAdapter(
  "SELECT DISTINCT CATEGORY FROM BOOKCAT ORDER BY CATEGORY"
  @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\malek\source\repos\BookStore\BookStore\BOOKDB.mdf;Integrated Security=True"
);
var dt = new DataTable();
da.Fill(dt);
categoryComboBox.DisplayMember = "CATEGORY";
categoryComboBox.ValueMember = "CATEGORY";
categoryComboBox.DataSource = dt;

当你想要用户选择的东西时:

 var cat = categoryComboBox.SelectedValue as string;

简单吧?

如果您使用强类型数据集,它会变得更加容易;为此,您只需将一个新的 DataSet 类型文件添加到您的项目(必须使用 net framework 而不是 net core/5+),将您的数据库拖到您的数据集中,向类别 TableAdapter 添加一个查询以获取不同的类别(如上所示) ) 然后打开数据源 window,将类别更改为组合并将其标记到表单上。无需编写代码; vs 会全部写出来