C#填充组合框具有数据库的列名而不是列值

时间:2018-09-17 14:30:59

标签: c# winforms

我知道这个问题已经被问了很多遍,并且有很多资源,但是相信我我已经尝试过了,不幸的是,同样的事情总是会发生。我真的不知道为什么我的组合框列值会重复。有人可以帮助我以适当的方式做到这些。我在这里忘了东西吗?谢谢

style="display: none;"

这是提供的图像 enter image description here

4 个答案:

答案 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查询找到的每一行添加CodeModelItemDescription项目。

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);