我正在编写一个应用程序,其中员工的姓氏和名字显示在(已排序)列表框中 - 使用sql语句为选定的业务单位(在下面的示例中硬编码)。员工(Access)数据库的索引是员工编号。
当从列表框中选择项目时,我无法找到一种方法来确定员工编号,使我能够读取数据库以获取新表单上员工的属性。我认为这个技巧可能使用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)
{
}
}
}
答案 0 :(得分:1)
不是一个合适的答案,而是一个想法:
也许您可以尝试将结果转换为数组或字典
listBox1.DataSource = <Array or Dictionary>;
listBox1.DisplayMember = "NameOfColumnToBeDisplayed";
listBox1.ValueMember = "NameOfColumnToUseValueFrom";
显示!=价值(例如,价值将是您的员工ID)
答案 1 :(得分:1)
不确定是否可以在列表框中添加隐藏字段。但是,如果将收到的查询存储到保留的变量中(可能是数据表而不是使用datareader),那么当用户单击从列表框中选择一个选项时,您可以使用该查询在查询中查找关联的记录使用列表框选择项的索引。
但是,您必须确保查询对结果进行排序,而不是列表框。
麦克
答案 2 :(得分:0)
我会将数据库中的数据存储在字典中,比如说
Dictionary<int,String[]>
其中键是ID,数组由Name和Surname组成。 然后使用Dictionary数据填充listBox。