C# 组合框建议

C# 组合框建议,c#,winforms,combobox,C#,Winforms,Combobox,当我从组合框中选择名称时,我尝试为每个循环使用,用studentid填充文本框。问题是当我从组合框中选择一个名称时;它没有选择相应的ID,ID也没有改变。我必须使用数据表吗 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using S

当我从组合框中选择名称时,我尝试为每个循环使用
,用studentid填充文本框。问题是当我从组合框中选择一个名称时;它没有选择相应的ID,ID也没有改变。我必须使用数据表吗

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.OleDb;

namespace DBExample
{
    public partial class Form1 : Form
    {
        private OleDbConnection dbConn; // Connectionn object
        private OleDbCommand dbCmd;     // Command object
        private OleDbDataReader dbReader;// Data Reader object
        private Member aMember;
        private string sConnection;
        // private TextBox tb1;
        // private TextBox tb2;

        private string sql;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                // Construct an object of the OleDbConnection 
                // class to store the connection string 
                // representing the type of data provider 
                // (database) and the source (actual db)
                sConnection =
                "Provider=Microsoft.Jet.OLEDB.4.0;" +
                "Data Source=c:member.mdb";
                dbConn = new OleDbConnection(sConnection);
                dbConn.Open();

                // Construct an object of the OleDbCommand 
                // class to hold the SQL query. Tie the  
                // OleDbCommand object to the OleDbConnection
                // object
                sql = "Select * From memberTable Order " +
                      "By LastName , FirstName ";
                dbCmd = new OleDbCommand();
                dbCmd.CommandText = sql;
                dbCmd.Connection = dbConn;

                // Create a dbReader object 
                dbReader = dbCmd.ExecuteReader();

                while (dbReader.Read())
                {
                    aMember = new Member
                            (dbReader["FirstName"].ToString(),
                             dbReader["LastName"].ToString(),
                             dbReader["StudentId"].ToString(),
                             dbReader["PhoneNumber"].ToString());

                    // tb1.Text = dbReader["FirstName"].ToString();
                    // tb2.Text = dbReader["LastName"].ToString();

                    // tb1.Text = aMember.X().ToString();

                    //tb2.Text = aMember.Y(aMember.ID).ToString();  

                    this.comboBox1.Items.Add(aMember.FirstName.ToString());                   

                    // this.listBox1.Items.Add(aMember.ToString());
                    // MessageBox.Show(aMember.ToString());
                    // Console.WriteLine(aMember.ToString());
                }
                dbReader.Close();
                dbConn.Close();
            }
            catch (System.Exception exc)
            {
                MessageBox.Show("show" + exc);
            }
        }

        private void DbGUI_Load(object sender, EventArgs e)
        {
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.textBox1.Text = comboBox1.SelectedItem.ToString();

            //textBox2.Text = string.Empty;
            foreach (var Item in comboBox1.Items);
                textBox2.Text += aMember.ID.ToString();

            //MessageBox.Show("read one record");
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {           
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
        }
    }
}
类文件如下所示

using System;
namespace DBExample
{
    public class Member
    {
        private string id;
        private string firstName;
        private string lastName;
        private string phoneNumber;

        public Member()
            : this("Not", "Assigned", "No ID", "No Phone Service")
        {
        }

        // Constructor
        public Member(string firstname, string lastname, string studentid, string phonenumber)
        {
            this.firstName = firstname;
            this.lastName = lastname;
            this.id = studentid;
            this.phoneNumber = phonenumber;
        }

        public string FirstName
        {
            get
            {
                return firstName;
            }
        }

        public string LastName
        {
            get
            {
                return lastName;
            }
        }

        public string ID
        {
            get
            {
                return id;
            }
        }

        public string PhoneNumber
        {
            get
            {
                return phoneNumber;
            }
        }

        public double X()
        {

            return -5.7;
        }//X()

        public int Y(string id)
        {
            int g;
            g = Convert.ToInt32(id);
            return g + 100000;
        }//Y()

        public int Z() { int m = 100; return m; }

        public override string ToString()
        {            
            return lastName + "\t" + firstName + "\t" + id + "\t" + phoneNumber + "\t" + X() + "\t" + Y(id) + "\t Z is " + Z();
        }
    }
}

问题是您将项目作为字符串添加到combobox,而不是添加项目本身:

在这里:

应该是:

this.comboBox1.Items.Add(aMember);
在设计器中将组合框的
ValueMember
设置为
ID
()

而不是这个(这没有任何意义):

使用以下命令:

textBox2.Text += combobox1.SelectedValue.ToString();

请将代码缩短为与当前问题相关的代码。这段代码比我们大多数人(包括我)准备阅读的要长得多。例如,您的成员类很可能仅限于字段(或自动属性)的定义
foreach (var Item in comboBox1.Items);
    textBox2.Text += aMember.ID.ToString();
textBox2.Text += combobox1.SelectedValue.ToString();