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

时间:2011-08-30 19:39:36

标签: c# wpf listbox

我有一个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只是一个测试。

3 个答案:

答案 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";