簡體   English   中英

如何在Windows窗體C#中填充組合框

[英]How to fill combobox in Windows Forms c#

我嘗試用MySQL數據庫填充一個組合框,但出現問題。 我認為一切都很好,我看到了我的舊項目如何填充組合框。 我認為所有代碼都是相同的,但是我忘記了填充的確切程度。

因此,這是我的代碼,但組合框未填充。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using System.Data.SqlClient;
using System.Data.Common;
using SR.Service;

namespace SR
{
    public partial class allWorkers : Form
    {
        private WorkerService service;
        MySqlConnection connection;
        string MyConnectionString = "Server=localhost;Database=SR_database;Uid=root;Pwd='';";


        public allWorkers()
        {
            InitializeComponent();

            connection = new MySqlConnection(MyConnectionString);
            service = new WorkerService();
        }

        private void btn_Main6_Click(object sender, EventArgs e)
        {
            this.Hide();
            var Main = new Main();
            Main.Show();
        }

        private void btn_createWorker_Click(object sender, EventArgs e)
        {
            //MySqlConnection connection = new MySqlConnection(MyConnectionString);
            MySqlCommand cmd;
            connection.Open();

                cmd = connection.CreateCommand();
                cmd.CommandText = service.CreateWorker(textBox1.Text);
                cmd.ExecuteNonQuery();
                MessageBox.Show("Вие създадохте нов работник с име: " + textBox1.Text);


            MySqlCommand command = new MySqlCommand(service.GetAllWorkers(), connection);
            MySqlDataAdapter da = new MySqlDataAdapter(command);
            using (DataTable dt = new DataTable())
            {
                da.Fill(dt);
                dataGridView1.DataSource = dt;
            }
            connection.Close();
        }

        private void allWorkers_Load(object sender, EventArgs e)
        {

        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {          

        }

        private void btn_deleteWorker_Click(object sender, EventArgs e)
        {


        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

            MySqlCommand cmd;
            connection.Open();

            cmd = connection.CreateCommand();
            cmd.CommandText = service.selectOnlyWorkerName();
            cmd.ExecuteNonQuery();

            MySqlCommand command = new MySqlCommand(service.selectOnlyWorkerName(), connection);
            using (var reader = command.ExecuteReader())
            {
                SuspendLayout();
                while (reader.Read())
                {
                    comboBox1.Items.Add(reader["worker_name"]);
                }
                ResumeLayout();
            }
            //
            //
            //  MySqlCommand command = new MySqlCommand(service.selectOnlyWorkerName(), connection);
            //  MySqlDataAdapter da = new MySqlDataAdapter(command);
            //
            //  using (DataTable dt = new DataTable())
            //  {
            //      da.Fill(dt);
            //      foreach (DataRow dr in dt.Rows)
            //      {
            //          comboBox1.Items.Add(dr["worker_name"]);
            //      }
            //  }
            //  connection.Close();
        }
    }
}

我想我忘記了一些東西,但是我不知道自己忘記寫什么。 感謝大伙們。

你需要這樣做

MySqlDataAdapter da = new MySqlDataAdapter(command);
DataTable dt = new DataTable();
da.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
    cb.Items.Add(dr["yourcol"]);
}

首先,始終要使用WinForms在UI中進行更改時,請考慮將其包裝在SuspendLayout()ResumeLayout()周圍。

另一件事...您是否考慮過執行命令? 只是不要使用SqlDataAdapter ,這會使您的工作更加輕松。


示例代碼:

MySqlCommand command = new MySqlCommand(service.selectOnlyWorkerName(), connection);
using (var reader = command.ExecuteReader())
{
    SuspendLayout();
    while(reader.Read())
    {
        comboBox1.Items.Add(reader["worker_name"]);
    }
    ResumeLayout();
}

或者如果您確實需要使用SqlDataAdapter

MySqlCommand command = new MySqlCommand(service.selectOnlyWorkerName(), connection);
MySqlDataAdapter da = new MySqlDataAdapter(command);
DataSet ds = new DataSet();
da.Fill(ds,"workers");
SuspendLayout();
foreach ( var row in ds.Tables["workers"].Rows)
{
    comboBox1.Items.Add(row[0]);
}
ResumeLayout();

上面發布的代碼應該可以正常工作,以防萬一您的命令確實產生了一些結果,然后再進行調試。

我相信您應該已經處理了DropDown事件,而不是SelectedIndexChanged事件。

DropDown過去為我工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM