2017-10-12 29 views
2

我正在編寫一個應用程序,其中僱員的姓氏和名字顯示在(已排序)列表框中 - 對於選定的業務單位(在以下示例中用硬編碼表示)使用sql語句顯示。員工(Access)數據庫的索引是員工編號。C# - 如何找到Listbox項目的數據庫項?

當從列表框中選擇項目時,我無法找到確定員工編號的方法,該編號使我能夠讀取數據庫以獲取有關新窗體上員工的屬性。我想訣竅可能是使用keyvaluepair,但需要一些關於如何編碼的指導。代碼示例如下,謝謝您期待您的幫助。

using System; 
using System.Collections.Generic; 
using System.Windows.Forms; 
using System.Data.OleDb; 

namespace WindowsFormsApp1 
{ 
    public partial class Form1 : Form 
    { 
     private OleDbConnection connection = new OleDbConnection(); 
     public Form1() 
     { 
      InitializeComponent(); 
      connection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Mark\Documents\Employee.accdb;Persist Security Info=False;"; 
      listBox1_Load(); 
      } 

    void listBox1_Load() 
     { 
      try 
      { 
      // Open database and select the data to be shown in the List Box - hard-coded example here 
      connection.Open(); 
      OleDbCommand command = new OleDbCommand(); 
      command.Connection = connection; 
      string query = "select ID, FirstName, Surname from Employee where BusinessUnit = 'Finance'"; 
      command.CommandText = query; 

      OleDbDataReader reader = command.ExecuteReader(); 

      // Read records returned by the query and populate the list box with the employee name 
      while (reader.Read()) 
      { 
       listBox1.Items.Add(reader["Surname"] + ", " + reader["FirstName"]); 
      } 
      connection.Close(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Error " + ex); 
      } 
     } 

     private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 

     } 
    } 
} 

回答

1

不知道您是否可以將隱藏字段添加到列表框中。但是,如果將收到的查詢存儲到保留的變量中(可能是數據表而不是使用數據讀取器),則當用戶單擊以從列表框中選擇一個選項時,可以使用它查找查詢中的關聯記錄使用列表框選定項目的索引。

但是,您必須確保查詢執行結果排序而不是列表框。

邁克

+0

感謝邁克 - 你的最後一點是我沒有考慮過的事情,應該讓我的生活變得更輕鬆。 – Markys

+0

沒有問題,您甚至可以更好地將列表框的數據源綁定到數據表,並在列表框上設置valuemember和displaymember屬性。 – Micktommyord

0

我將存儲在數據庫字典的數據,讓我們說

Dictionary<int,String[]> 

其中關鍵的是ID和陣列由名和姓。 然後你用Dictionary數據填充listBox。

1

不是一個合適的答案,但一個想法:

也許你可以嘗試類似的結果轉換到一個數組或字典

listBox1.DataSource = <Array or Dictionary>; 
listBox1.DisplayMember = "NameOfColumnToBeDisplayed"; 
listBox1.ValueMember = "NameOfColumnToUseValueFrom"; 

和顯示=值(例如價值將是你的員工! id)

+0

顯示的將是更多的格式爲「姓,名」一列,所以我不知道是否DisplayMember允許的數據。我以前嘗試使用數組,但是因爲列表自動排序在列表框中,所以項目不匹配。 – Markys

+0

他可以將兩個列連接爲一個字符串。這真的取決於他的目的以及如何成功檢索他可以輕鬆操作的集合。自從我上次觸及C#之後已經有一段時間了,但我記得做了一些非常相似的事情。不過,這只是一個想法。 – abr

相關問題