C # Заполнение поля со списком Имя столбца базы данных, а не значения столбца - PullRequest
0 голосов
/ 17 сентября 2018

Я знаю, что об этом спрашивали много раз, и об этом так много ресурсов, но, поверьте мне, я попробовал это, К сожалению, всегда происходит одно и то же. Я действительно не знаю, почему мое значение столбца со списком повторяется. Может ли кто-нибудь помочь мне сделать это должным образом. Я что-то забыл здесь? Спасибо

 public void FillComboBox()
  {
        using (var con = SQLConnection.GetConnection())
        {
            using (var cmd = new SqlCommand("SELECT * FROM employee_product", con))
            {
                using (var reader = cmd.ExecuteReader())
                {

                    while (reader.Read())
                    {
                        cbox_order.Items.Add("Code").ToString();
                        cbox_order.Items.Add("Model").ToString();
                        cbox_order.Items.Add("Itemdescription").ToString();
                    }

                }
            }
        }
  }

Вот изображение enter image description here

Ответы [ 4 ]

0 голосов
/ 17 сентября 2018

Первая загрузка данных в 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); 
0 голосов
/ 17 сентября 2018

Попробуйте закрыть и утилизировать считыватель и закрыть соединение.

reader.close;
reader.dispose;

con.close();
0 голосов
/ 17 сентября 2018

фактически вы не используете DataReader, но вы просто добавляете элемент Code, Model и ItemDescription для каждой строки, найденной в запросе MySQL.

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

EDIT

если вы хотите использовать имя столбца вместо данных, вы можете использовать этот запрос, но это бесполезно, если вы уже знаете имя столбца.

SELECT COLUMN_NAME FROM information_schema.columns WHERE table_schema='databasename' AND table_name='tablename'
0 голосов
/ 17 сентября 2018

Если вы проверяете код, вы просто добавляете строки «Код», «Модель» и «Элемент описания» в комбинированный список.Я думаю, вы хотите что-то вроде:

while (reader.Read())
{
   cbox_order.Items.Add($"{reader["Code"]} {reader["Model"]} {reader["Itemdescription"]}");
}

В этом фрагменте я использую reader, чтобы получить значения столбцов в возвращенной строке из БД, а затем отображаю объединение этих значений в один string, который затем добавляется к ComboBox как элемент.

Обновление

Если вы знаете имена столбцов, почему бы просто не сделать это?

public void FillComboBox()
{
    cbox_order.Items.Add("Code").ToString();
    cbox_order.Items.Add("Model").ToString();
    cbox_order.Items.Add("Itemdescription").ToString();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...