我有一个Datatable,其中包含我要用于List的列。为了测试我的employeeList,我添加了一个ListBox,然后在代码中我添加了 lstEmployees.ItemsSource = employeeList(cboStore.Text); 我知道这不是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只是一个测试。
答案 0 :(得分:2)
由于您尚未绑定,因此需要将ListBox的DisplayMemberPath设置为您希望看到的Employee类中的值。现在,它看到了一个对象Employee的ItemSource,它不知道应该显示哪个Employee成员,所以它显示了Employee对象的默认ToString。
绑定后,您可以使用ListBoxItem模板并绑定到Employee对象中的字段。
编辑示例
如果您的Employee类看起来像这样:
public class Employee
{
public string LoginId { get; set;}
}
然后你要设置lstEmployees.DisplayMemberPath =“LoginId”。您可以在ListBox XAML或代码隐藏中设置它。
答案 1 :(得分:1)
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";
}
答案 2 :(得分:0)
设置ItemsSource之后你也应该
lstEmployees.DisplayMemberPath = "Field of Employee you want to see in the ListBox";