2013-08-12 4 views
0

У меня есть это, чтобы добавить полное имя каждого сотрудника в comboBox. Проблема в том, где я буду хранить (скрывать) EmpID, чтобы, если элемент был выбран в comboBox, он отобразит EmpID выбранного сотрудника в текстовом поле?Сохраните некоторые данные из базы данных

public void fillComboBox() 
{ 
    comboBox1.Items.Add("Add Employee"); 
    using (SqlConnection myDatabaseConnection = new SqlConnection(myConnectionString.ConnectionString)) 
    { 
     myDatabaseConnection.Open(); 

     using (SqlCommand mySqlCommand = new SqlCommand("Select EmployeeID, LastName, FirstName, MiddleName from Employee", myDatabaseConnection)) 
     { 
      using (SqlDataReader sqlreader = mySqlCommand.ExecuteReader()) 
      { 
       while (sqlreader.Read()) 
       { 
        string Lname = sqlreader.GetString(sqlreader.GetOrdinal("LastName")); 
        string Fname = sqlreader.GetString(sqlreader.GetOrdinal("FirstName")); 
        string Mname = sqlreader.GetString(sqlreader.GetOrdinal("MiddleName")); 
        string fullName = Lname + ", " + Fname + " " + Mname; 
        comboBox1.Items.Add(fullName); 
       } 
      } 
     } 
    } 

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     //textBox1.Text = SelectedEmpID 
     if (comboBox1.Text == "Add Employee") 
     { 
      EmployeeForm nf = new EmployeeForm(); 
      DialogResult res = nf.ShowDialog(); 
      if (res == DialogResult.OK) 
      { 
       comboBox1.Items.Clear(); 
       fillComboBox(); 
      } 
     } 
    } 

ответ

3

сделать это как этот

using (SqlConnection con = new SqlConnection(myConnectionString.ConnectionString)) 
    { 
     string query = "Select EmployeeID, (LastName + ','+ FirstName+' '+ MiddleName) as Name from Employee"; 
     SqlDataAdapter dap = new SqlDataAdapter(query ,con); 
     DataTable dt = new DataTable(); 
     dap.Fill(dt); 
     comboBox1.DisplayMember = "Name"; 
     comboBox1.ValueMember = "EmployeeID"; 
     DataRow dr = dt.NewRow(); 
     dr[0] = -1; 
     dr[1] = "Add Employee"; 
     dt.Rows.InsertAt(dr, 0); 
     comboBox1.DataSource = dt; 

    } 

затем

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if(Convert.ToInt32(comboBox1.SelectedValue.ToString())==-1) 
     { 
     EmployeeForm nf = new EmployeeForm(); 
     DialogResult res = nf.ShowDialog(); 
     if (res == DialogResult.OK) 
     { 
      comboBox1.Items.Clear(); 
      fillComboBox(); 
     } 
     } 
    } 

Примечание: Если вы хотите, чтобы реагировать только тогда, когда пользователь изменить выбранный элемент в поле со списком, то его лучше подписаться на SelectionChangeCommitted.

+0

отредактировать мой вопрос. Как насчет дополнительного элемента (Добавить сотрудника), как я его сохраню? И когда выбрано «Добавить сотрудника», что-то произойдет? –

+0

Я обновил свой ответ – Ehsan

+0

fillComboBox(); находится в Form_Load. Кажется, comboBox1_SelectedIndexChanged срабатывает сразу, когда форма загружается –

0

Прежде всего, я бы создал класс Employee. Например, как это:

public class Employee 
{ 
    public int EmployeeID {get;set;} 
    public string LastName { get; set; } 
    public string FirstName { get; set; } 
    public string MiddleName { get; set; } 
    public string FullName { get { return LastName + ", " + FirstName + " " + MiddleName; } } 

    public Employee(IDataRecord record) 
    { 
     this.EmployeeID = Convert.ToInt32(record["EmployeeID"]); 
     this.LastName = record["LastName"].ToString(); 
     this.FirstName = record["FirstName"].ToString(); 
     this.MiddleName = record["MiddleName"].ToString(); 
    } 
} 

Используя тот класс вашей fillBox() функции будет выглядеть следующим образом:

public void fillComboBox() 
    { 
     comboBox1.DisplayMember = "FullName"; 
     comboBox1.Items.Add("Add employee"); 
     using (SqlConnection myDatabaseConnection = new SqlConnection(myConnectionString.ConnectionString)) 
     { 
      myDatabaseConnection.Open(); 

      using (SqlCommand mySqlCommand = new SqlCommand("Select EmployeeID, LastName, FirstName, MiddleName from Employee", myDatabaseConnection)) 
      { 
       using (SqlDataReader sqlreader = mySqlCommand.ExecuteReader()) 
       { 
        while (sqlreader.Read()) 
        { 
         comboBox1.Items.Add(new Employee(sqlreader)); 
        } 
       } 
      } 
     } 
    } 

И конечно SelectedIndexChangedEvent тогда:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      var selecetedEmployee = comboBox1.SelectedItem as Employee; 
      if (selecetedEmployee == null) 
      { 
       EmployeeForm nf = new EmployeeForm(); 
       DialogResult res = nf.ShowDialog(); 
       if (res == DialogResult.OK) 
       { 
        comboBox1.Items.Clear(); 
        fillComboBox(); 
       } 
      } 
      else 
      { 
       textBox1.Text = selecetedEmployee.EmployeeID.ToString(); 
      } 
     } 
Смежные вопросы