是否可以使用来自 sql 服务器的一行数据填充 c# 列表框

Is it possible to populate a c# list box with a Row of data from sql server

所以,我是 C#、Visual studio 等方面的新手,但是我对 SQL 服务器有一些经验。 我有一个 table,其中包含数据(很明显),我想做的是检索该数据并将其显示在下拉列表中,以便客户可以 select 他们想要的数据。我遇到的问题是,列表只显示一个特定字段的数据。

例如,我有一个名为 table 的车辆详细信息,其中包含“制造商、型号、年龄...等”。然而,当我在下拉框中设置功能时,它只允许我 select 一个特定的列 I.E Make 或 Model。

有什么方法可以从 SQL 服务器检索整列并将其显示为一个列表。 I.E 选项一是 Ford, Focus, 5. 下一个选项是 Ford, Fiesta, 10.

是不是因为这行代码是单选项? this.comboBox1.DisplayMember = "制作"; 当我尝试在 GUI 中编辑它时,它基本上告诉我不行。

如有任何帮助,我们将不胜感激。

想法是,当客户 select 选择并按下提交按钮时,它将通过 sql 服务器触发信息。

干杯

确实只有一个 DisplayMember,但是那个成员可以是任何你喜欢的成员。例如,如果您要将组合框绑定到对象列表,请为对象提供一个显示您想要的内容的 属性:

public class MyClass
{
    public string Make { get; set; }
    public string Model { get; set; }

    public string Display { get { return $"{Make} - {Model}"; } }
}

然后你可以绑定到 属性:

comboBox1.DisplayMember = "Display";

同样,如果您的结果类似于 DataTable 绑定到 SQL 查询的结果,您的查询也可以 return 计算结果:

SELECT
  Make,
  Model,
  Make + ' - ' + Model AS Display
FROM
  --...

无论您要将控件绑定到什么,请为其提供您要查找的计算结果。控件本身非常通用,但您可以对 objects/data 进行特定控制,并且可以在其中包含您喜欢的所有逻辑。

如果想得到显示一行数据的下拉菜单,可以参考下面的代码:

string connStr = "Enter your own connect string";
string sql = "select * from Book";//Enter your own sql statement
    private void button1_Click(object sender, EventArgs e)
    {
        comboBox1.Items.Clear();
        SqlConnection conn = new SqlConnection(connStr);
        using (conn)
        {
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = sql;
            cmd.Connection = conn;
            conn.Open();
            SqlDataReader read = cmd.ExecuteReader();
            if (read.HasRows)
            {
                while (read.Read())
                {
                    comboBox1.Items.Add(read["Id"].ToString() + "," + read["Name"].ToString());   
                    //You can refer to change this line of code to: comboBox1.Items.Add(read["Make"].ToString() + ", " + read["Model"].ToString()+", " + read["age"].ToString());
                }
            }
            conn.Close();
        }
    }