如何使用数据表作为源,用列表填充列表框
本文关键字:列表 填充 何使用 数据表 | 更新日期: 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";