C#ComboBox Selected Value从数据库返回Null、Item和Value
我将员工的姓氏和名字添加到一个正在工作的组合框中,例如LastName,FirstName。。该值应设置为EmpID,以便在选择项目时,EmpID将作为值返回C#ComboBox Selected Value从数据库返回Null、Item和Value,c#,combobox,C#,Combobox,我将员工的姓氏和名字添加到一个正在工作的组合框中,例如LastName,FirstName。。该值应设置为EmpID,以便在选择项目时,EmpID将作为值返回 conn.Open(); using (SqlCommand cmd = new SqlCommand("Select (LastName + ', ' + FirstName) AS Employee,EmpID from Employee ", conn)) using (SqlDataReader rdr = cmd.Execut
conn.Open();
using (SqlCommand cmd = new SqlCommand("Select (LastName + ', ' + FirstName) AS Employee,EmpID from Employee ", conn))
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
ListItem ComboItem = new ListItem();
ComboItem.Text = rdr["Employee"].ToString();
//ComboItem.Value = rdr["EmpID"].ToString();
ComboItem.Value = rdr["EmpID"].ToString() ;
GrpEmpCBox.Items.Add(ComboItem);
//GrpEmpCBox.Items.Add(rdr["Employee"].ToString());
}
}
但是当我得到它的值时,它返回null
private void btnRunReport_Click(object sender, EventArgs e)
{
EmployeeTimecardReport rptEmpTimecard = new EmployeeTimecardReport();
rptEmpTimecard.Employee = GrpEmpCBox.SelectedValue.ToString(); //<--- this returns null
}
private void btnRunReport_单击(对象发送者,事件参数e)
{
EmployeeTimecardReport rptEmpTimecard=新的EmployeeTimecardReport();
rptpemptimecard.Employee=grpempbox.SelectedValue.ToString();//改用DisplayMember
和ValueMember
属性
有很多方法可以实现这一点……这里有一种:
comboBox1.ValueMember = "Item1"; // the value of the selected item
comboBox1.DisplayMember = "Item2"; // the field to display to the user
var emps = new List<Tuple<int, string>>();
while (rdr.Read())
emps.Add(Tuple.Create(Convert.ToInt32(rdr["EmpID"]), rdr["Employee"].ToString()));
comboBox1.DataSource = emps;
我将添加第二个示例来演示这些属性的作用
假设您创建了一个Employee类
public class Employee
{
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public DateTime HireDate { get; set; }
}
然后从数据库中的Employee表中提取一组数据
var emps = new List<Employee>();
while (rdr.Read())
emps.Add(new Employee(ID = Convert.ToInt32(rdr["EmpID"]),
Name = rdr["Employee"].ToString(),
Age = Convert.ToInt32(rdr["Age"]),
HireDate = Convert.ToDateTime(rdr["Hired"])));
comboBox1.DataSource = emps;
现在,您可以分别使用comboBox1.SelectedValue
和Combox1.Text
获取这些值。或者您也可以获取整个Employee
记录,它存储在Combox1.SelectedItem中。它正在工作。我可以知道ValueMember和DisplayMember的用途吗??
var emps = new List<Employee>();
while (rdr.Read())
emps.Add(new Employee(ID = Convert.ToInt32(rdr["EmpID"]),
Name = rdr["Employee"].ToString(),
Age = Convert.ToInt32(rdr["Age"]),
HireDate = Convert.ToDateTime(rdr["Hired"])));
comboBox1.DataSource = emps;
comboBox1.ValueMember = "ID";
comboBox1.DisplayMember = "Name";