如何从组合框中显示名称和插入值(name's ID)

本文关键字:name ID 插入 组合 显示 | 更新日期: 2023-09-27 17:51:06

提前感谢大家。我是c# Windows窗体的新用户。

我有一个表的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#中我应该怎么做呢?再次感谢您的宝贵时间!

如何从组合框中显示名称和插入值(name's ID)

如果我正确理解你的问题,这应该做你正在寻找的:

用这样的东西加载你的组合框(我现在不能测试这个,所以我可能犯了一些拼写错误或语法错误):

* *更新:好的。这是我最后一次在赶时间的时候回答"在路上"的问题。我最初的代码充满了问题和愚蠢的错别字。我真诚的道歉!下面的代码包含了您尝试执行的所有操作的一个非常基本的版本。你可能需要调整它以适应你的需要。

的一些建议:

。将连接和命令放在using块中,如图所示。

B。不要在代码中硬编码连接字符串,而是使用Properties。在解决方案资源管理器(左侧关闭)中的设置设计器中创建连接字符串的中心引用。然后在代码中引用它,如下所示。

下面的命令执行你想要实现的基本功能,并在我的机器上运行:

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());
                }
            }
        }
    }
}

希望对你有帮助。

您可以添加自定义类型,而不是将名称字符串添加到组合框中,

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;