2011-02-26 50 views
0

我與for each循環試圖填充文本框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(); 
     } 
    } 
} 
+1

請縮短你的代碼是什麼相關手頭的問題。這段代碼是很長的什麼我們大多數人(包括我在內)都準備好讀。例如,您的會員類最可能被限制爲字段(或自動性質)的定義 – 2011-02-26 16:29:03

回答

2

的問題是,您要添加的項目,如字符串組合框,而不是增加項目本身:

這裏:

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

應該是:

this.comboBox1.Items.Add(aMember); 

在設計者設定ValueMember的組合框是IDmsdn

取而代之的是(這不作任何意義):

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

使用此:

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