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,同时显示相同的名称,用户习惯看到?

Winforms列表框项的幕后属性

你可以添加任何你想要的列表框:

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;       
}