[英]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.