如何使用数据表作为源,用列表填充列表框

本文关键字:列表 填充 何使用 数据表 | 更新日期: 2023-09-27 18:06:58

我有一个Datatable,其中包含我想用于List的列。为了测试我的employeeList,我添加了一个ListBox,然后在代码中添加了lstEmployees。我知道这不是WPF应用程序的"最佳实践",但我是XAML, WPF和c#的新手(来自VB)。Net Winforms),所以我专注于让事情先工作起来,然后再重构(是的,我会的!)

我正在用下面的代码填充我的列表,这使我得到正确的字段,因为我可以在调试器中看到正确的值。然而,在列表框中,我看到这个ManpowerManager.MainWindow+Employee。如所列项目。要查看LoginId值需要做些什么?

    private static List<Employee> employeeList(string store)
    { 
        List<Employee> employeeList= default(List<Employee>);
        employeeList = new List<Employee>();
        using (DataTable dt = Logins.getDataset(store, "Manpower_SelectLogins"))
        {
            foreach (DataRow dr in dt.Rows)
            {
                employeeList.Add(new Employee(dr["LoginId"].ToString()));
            }
        } 
       return employeeList;
    }
在这一点上,我没有绑定它,因为ListBox只是一个测试。

如何使用数据表作为源,用列表填充列表框

因为您还没有绑定,您需要将ListBox的DisplayMemberPath设置为您希望看到的Employee类中的值。现在,它看到的是Employee对象的ItemSource,它不知道Employee的哪个成员应该显示,所以它显示Employee对象的默认ToString。

一旦你绑定了,你就可以使用ListBoxItem模板并绑定到Employee对象中的字段。

编辑示例

如果你的Employee类是这样的:

public class Employee
{
    public string LoginId { get; set;}
}

然后设置lstEmployees。DisplayMemberPath = "LoginId"。您可以将此设置为ListBox XAML或代码隐藏。

private void Form1_Load(object sender, EventArgs e)
{
    BJobProviderJob bJPJ=new BJobProviderJob();
    DataTable dt;
    dt = bJPJ.getAllProviderJobDetails_2(1);
    List<myObject> ls = default( List<myObject>);
    ls = new List<myObject>();
    foreach (DataRow row in dt.Rows)
    {
        ls.Add(new myObject(Convert.ToInt32(row["JJP_Id"]),row["Job_Name"].ToString()));
    }
    listBox1.MultiColumn = true;
    listBox1.DataSource = ls;
    listBox1.DisplayMember = "JPJob";
    listBox1.ValueMember = "JPJID";
}

在设置ItemsSource之后,你还应该做

lstEmployees.DisplayMemberPath = "Field of Employee you want to see in the ListBox";