Winforms列表框项的幕后属性
本文关键字:属性 列表 Winforms | 更新日期: 2023-09-27 18:15:05
所以我要回去清理我多年前写的代码。在第一部分中(我使用了几次),我有一个显示员工姓名的列表框,例如
史密斯,约翰美国能源部,简
当用户单击名称时,我执行如下操作
String unBrokenName = ListBox1.SelectedItem.ToString();
String LastName = unBrokenName.Substring(...
你明白了,我根据","提取名字和姓氏。然后我这样做,从sql数据库中获取员工。
Employee SelectedEmployee = Employee.GetEmployeeByFirstLast(FirstName, LastName);
在当时,这是我所知道的最好的。现在感觉不对,因为我知道我应该能够获得员工的sql ID,当他们选择它,如
int EmployeeId = SOMELISTBOXSELECTEDITEMPROPERTY;
Employee SelectedEmployee = Employee.GetEmployeeByID(EmployeeId);
是否有一些属性的列表框项,将存储这个id,同时显示相同的名称,用户习惯看到?
你可以添加任何你想要的列表框:
class Foo
{
public int Id { get; set; }
public string Name { get; set; }
public override string ToString()
{
return this.Name;
}
}
然后:
listBox1.Items.Add( new Foo() { Id = 101, Name = "Foo Bar" } );
listBox1.Items.Add( new Foo() { Id = 102, Name = "Foo Bar Jr." } );
SelectedItem
属性现在会给你选择的Foo
,同时在列表中显示Name
属性。
private void listBox1_SelectedIndexChanged( object sender, EventArgs e )
{
Foo item = ( listBox1.SelectedItem as Foo );
if( item != null )
{
// use item.Id here
}
}
除了覆盖ToString
,您还可以使用列表框的DisplayMember
属性来选择列表框将显示的属性。
你可以这样做:
listBox1.DataSource = employeesList;
listBox1.DisplayMember = "LastName";
listBox1.ValueMember = "EmployeeId";
当你运行你的应用程序时,列表框将有你正在传递的员工列表,它将显示LastName
。但是当您选择一个项目时,您可以通过以下方式访问id:
`listBox1.SelectedValue();`
然后在listbox1_Click
事件中像这样:
if (listBox1.SelectedIndex != -1)
{
int employeeId = listBox1.SelectedValue();
//do something here;
}