我知道这个问题已经被问了很多遍,并且有很多资源,但是相信我我已经尝试过了,不幸的是,同样的事情总是会发生。我真的不知道为什么我的组合框列值会重复。有人可以帮助我以适当的方式做到这些。我在这里忘了东西吗?谢谢
style="display: none;"
答案 0 :(得分:2)
如果您检查代码,则基本上只是将字符串“ Code”,“ Model”和“ Itemdescription”添加到组合框。我想您想要的是这样的东西:
while (reader.Read())
{
cbox_order.Items.Add($"{reader["Code"]} {reader["Model"]} {reader["Itemdescription"]}");
}
在此代码段中,我使用reader
从数据库中获取返回行中的列的值,然后显示将这些值连接到单个string
中,然后将其添加到{{ 1}}作为项目。
如果您知道列名,为什么不这样做呢?
ComboBox
答案 1 :(得分:0)
尝试关闭并丢弃阅读器并关闭连接。
reader.close;
reader.dispose;
con.close();
答案 2 :(得分:0)
实际上您没有使用DataReader,而是只为通过MySQL查询找到的每一行添加Code
,Model
和ItemDescription
项目。
cbox_order.Items.Add("Code").ToString();
cbox_order.Items.Add("Model").ToString();
cbox_order.Items.Add("Itemdescription").ToString();
如果要使用MySQL查询的结果,可以尝试以下方法:
cbox_order.Items.Add(reader["Code"].ToString()).ToString(); // Change "Code" by the column name into the database
cbox_order.Items.Add(reader["Model"].ToString()).ToString(); // Change "Model" by the column name into the database
cbox_order.Items.Add(reader["Itemdescription"].ToString()).ToString(); // Change "Itemdescription" by the column name into the database
别忘了最后关闭阅读器
reader.Close();
编辑
如果您想要列名而不是数据,则可以使用此查询,但是如果您已经知道列名,那就没用了。
SELECT COLUMN_NAME FROM information_schema.columns WHERE table_schema='databasename' AND table_name='tablename'
答案 3 :(得分:0)
首先将数据加载到DataTable
中:
var connection = @"Your connection string";
var command = "Your SELECT command text";
var table = new DataTable();
using (var adapter = new SqlDataAdapter(command, connection))
adapter.Fill(table);
要显示ComboBox
中的列列表:
comboBox1.DataSource = table.Columns.Cast<DataColumn>().ToList();
comboBox1.ValueMember = "ColumnName";
comboBox1.DisplayMember = "ColumnName";
要显示DataGridView
中的数据:
dataGridView1.DataSource = table;
在上面的代码中,我想您将要显示表的各列,您还希望同时加载其数据。如果您只想仅加载列信息,则可以使用:
adapter.FillSchema(table, SchemaType.Mapped);