1

因此,通常当您创建一个组合框时,您将成为放置选择值的人,但我希望我的组合框中的数据将从我的数据库 mysql 中选择。我要怎么做?

我被困在从我的 sql 中选择数据到组合框中!

到目前为止,这是我的代码!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using MySql.Data.MySqlClient;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            MySqlConnection connection = null;            
            string hostname = "localhost";
            string database = "aparece_hoteldb";
            string username = "root";
            string password = "";
            connection = new MySqlConnection("host=" + hostname + 
                                            ";database=" + database + 
                                            ";username=" + username + 
                                            ";password=" + password + ";");


            string table = "reservations";
            string query = "SELECT * FROM " + table;
            connection.Open();
            MySqlDataAdapter da_res = null;
            DataSet ds_res = null;
            ds_res = new DataSet();
            da_res = new MySqlDataAdapter(query, connection);
            da_res.Fill(ds_res, table);

            dataGridView2.DataSource = ds_res.Tables[table];

        }

        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {


        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }
    }
}
4

3 回答 3

3

好的,因此将数据列表绑定到组合框,尤其是当它是您已经拥有的组合框时,将非常简单。所以,在这一行之后:

dataGridView2.DataSource = ds_res.Tables[table];

让我们再添加一些:

comboBox1.DisplayMember = "YourDisplayField";
comboBox1.ValueMember = "YourValueField";
comboBox1.DataSource = ds_res.Tables[table];

这会将数据绑定到组合框。但是,让我们分解一下。DisplayMember是您希望用户看到的字段值。通常这是行的名称或简要描述。ValueMember是您要绑定到SelectedValue属性的字段。当用户在组合框中选择一个项目时,SelectedValue将被设置为该字段的值。

现在你可以消费一个更好的事件SelectedIndexChanged,现在你可以消费了SelectedValueChanged。每次用户选择一个新值时,该事件都会触发,您可以根据需要使用它。

DataRow如果需要,可以通过SelectedItem像这样转换组合框的属性来获得实际值:

var row = comboBox1.SelectedItem as DataRow;

或者你可以抓住那个价值并用它做点什么:

var val = comboBox1.SelectedValue;

您可以将其转换为该ValueMember字段的任何类型。如果您将其设置为一个int字段,那么您可能会执行以下操作:

var val = (int)comboBox1.SelectedValue;

如果它是一个string字段,那么可能是这样的:

var val = comboBox1.SelectedValue as string;
于 2013-03-12T14:59:57.713 回答
1

假设您得到 sql 返回的单个列,您可以设置组合框的数据源以从数据表或数据集中填充它。

comboBox1.DataSource = myDataTable;
于 2013-03-12T14:50:45.383 回答
0

//在FORM_LOAD里面,

private void Form7_Load(object sender, EventArgs e){
        cboFloor.SelectedIndex = -1;
        cboFloor.DropDownStyle = ComboBoxStyle.DropDownList;
        GetFloor();
        }

//创建一个函数并插入此代码。

private voide GetFloor{
        string query = @"SELECT DISTINCT floor FROM tbroom ORDER BY floor ASC";



        try
        {
            con.Open();
            MySqlCommand cmd = new MySqlCommand(query, con);
            MySqlDataReader rdr;
            rdr = cmd.ExecuteReader();
            while (rdr.Read())
            {
                cboFloor.Items.Add(rdr["floor"]);

            }
        }
        catch (MySqlException mysqlex)
        {
            MessageBox.Show(mysqlex.Message.ToString());
        }
        finally
        {
            con.Close();
        }}
于 2015-08-08T08:40:52.280 回答