4

よろしくお願いします。私は c# Windows Forms の新しいユーザーです。

IDと名前のテーブルがあります

ID | 名前
---------------
1 | ライオン
2 | 虎
3 | クロコダイル

テーブルからコンボボックスに表示したい場合は、これが好きでした。

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 System.Data.SqlClient;

namespace Insert_update_delete_nr2
{
    public partial class Form1 : Form
    {
        SqlConnection con = new SqlConnection(@"CONNECTION_STRING");

        SqlCommand cmd = new SqlCommand();
        SqlDataReader dr;
        public Form1()
        {
            InitializeComponent();
        }


        private void button1_Click_1(object sender, EventArgs e)
        {

                con.Open();

                string query = "select * from info";
                SqlCommand cmd = new SqlCommand(query, con);
                cmd.CommandType = CommandType.Text;
                dr = cmd.ExecuteReader();


                while (dr.Read())//while true
                {

                    comboBox1.Items.Add(dr[0].ToString());//loading values into combo
                }

                cmd.CommandText = "insert into info3 (name, name_id) values ('"+textBox1.Text+"', '" + comboBox1.Items.Add(dr[0].ToString()) + "')";
                cmd.ExecuteNonQuery();

                cmd.Clone();
                con.Close();

        }

        private void loadlist()
        {
            listBox1.Items.Clear();
            listBox2.Items.Clear();
            listBox3.Items.Clear();
            con.Open();

            cmd.CommandText = "select * from info3";
             dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    listBox1.Items.Add(dr[0].ToString());
                    listBox2.Items.Add(dr[1]).ToString();
                    listBox3.Items.Add(dr[3].ToString());


                }
            }
            con.Close();


        }

        private void Form1_Load(object sender, EventArgs e)
    {

       // con.Open();
        FillDropDownList(string SQL, ComboBox comboBox1);// This giving me error.
        // How should I call this FillDropDownlist function? The parameters which are they?
        cmd.Connection = con;
        listBox3.Visible = false;

        loadlist();

    }



    }
}


そして、IDではなく名前であるコンボボックスに表示されているものを挿入しようとしています。

PHP では、次のようになります。

$sql =  " SELECT * FROM info ";
$res = mysql_query($sql);
while ($row = mysql_fetch_array($res)) {
    print '<option value="'.$row['id'].'">'.$row['name'].'</option>';
}

これにより、ID と表示名が挿入されます。しかし、C# でどのようにすればよいでしょうか? お時間をいただきありがとうございます。

4

2 に答える 2

5

コンボボックスに名前文字列を追加する代わりに、代わりにカスタム タイプを追加できます。

class Animal
{
    public int ID { get; set; }
    public string Name { get; set; }

    public override string ToString()
    {
        return Name;
    }
}

エントリごとにそのタイプのオブジェクトを作成し ( var animal = new Animal { ID = (int)dr[0], Name = (string)dr[1] };)、そのオブジェクトをコンボボックスに追加します。次に、アイテムを取得するときに、アイテムを Animal タイプにキャストして ID を取得します。

var animal = (Animal)comboBox1.SelectedItem;
于 2013-01-09T23:39:49.420 に答える
4

あなたの質問を正しく理解していれば、これはあなたが求めていることをするはずです:

コンボ ボックスに次のようなものをロードします (現在これをテストできないため、入力ミスや軽微な構文エラーが発生している可能性があります)。

* *更新: わかりました。急いでいるときに「外出先で」質問に答えようとするのはこれが最後です。私の元のコードには、問題やばかげたタイプミスがたくさんありました。心からお詫び申し上げます!次のコードには、実行しようとしているすべての非常に基本的なバージョンが含まれています。ニーズに合わせて調整する必要がある場合があります。

いくつかの提案:

A. 図のように、接続とコマンドを using ブロックに配置します。

B. コードに接続文字列をハードコーディングする代わりに、ソリューション エクスプローラー (左側) の Properties.Settings デザイナーを使用して、接続文字列の中心的な参照を作成します。次に、示されているようにコードで参照します。

以下は、達成しようとしている基本的な機能を実行し、私のマシンで実行されます。

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


    private void Form1_Load(object sender, EventArgs e)
    {
        button1.Click += new EventHandler(button1_Click);
        this.FillDropDownList();
    }


    void button1_Click(object sender, EventArgs e)
    {
        this.SaveComboBoxContent();
    }


    public void FillDropDownList()
    {
        string SQL = "SELECT id, name FROM info ORDER BY name";

        DataTable dt = new DataTable();

        // Set the connection string in the Solutions Explorer/Properties/Settings object (double-click)
        using (var cn = new SqlConnection(Properties.Settings.Default.MyConnectionString))
        {
            using(var cmd = new SqlCommand(SQL, cn))
            {
                cn.Open();

                try
                {
                    dt.Load(cmd.ExecuteReader());
                }
                catch (SqlException e)
                {
                    // Do some logging or something. 
                    MessageBox.Show("There was an error accessing your data. DETAIL: " + e.ToString());
                }
            }
        }

        // UPDATED - The .ValueMember and .DisplayMember properties 
        // refer to the string name of the field (oops!):
        comboBox1.DataSource = dt;
        comboBox1.ValueMember = "id";
        comboBox1.DisplayMember = "name";
    }


    public void SaveComboBoxContent()
    {
        string SQL = "INSERT INTO info2 (name_id) VALUES (@name_id)";

        using (var cn = new SqlConnection(Properties.Settings.Default.MyConnectionString))
        {
            using(var cmd = new SqlCommand(SQL, cn))
            {
                cmd.Parameters.AddWithValue("@name_id", comboBox1.SelectedValue);
                cn.Open();

                try
                {
                    cmd.ExecuteNonQuery();
                }
                catch (SqlException e)
                {
                    // Do some logging or something. 
                    MessageBox.Show("There was an error accessing your data. DETAIL: " + e.ToString());
                }
            }
        }
    }

}

それが役立つことを願っています。

于 2013-01-09T23:50:14.950 に答える