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 に答える