Как заполнить список с помощью списка, используя источник данных в качестве источника - PullRequest
0 голосов
/ 30 августа 2011

У меня есть Datatable, который содержит столбец, который я хочу использовать для списка. Чтобы проверить свой 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 ]

2 голосов
/ 30 августа 2011

Так как вы еще не привязываетесь, вам нужно установить DisplayMemberPath объекта ListBox на значение в классе Employee, который вы хотите видеть.Прямо сейчас он видит ItemSource объекта Employee и не знает, какой элемент Employee должен быть отображен, поэтому он отображает ToString объекта Employee по умолчанию.

После привязки вы можетеиспользуйте шаблон ListBoxItem и привяжите к полям в объекте Employee.

РЕДАКТИРОВАТЬ ДЛЯ ПРИМЕРА

Если ваш класс Employee выглядит следующим образом:

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

Тогда вы должны установить lstEmployees.DisplayMemberPath = "LoginId".Вы можете установить это в ListBox XAML или коде позади.

1 голос
/ 27 февраля 2012
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";
}
0 голосов
/ 30 августа 2011

после установки ItemsSource вы также должны сделать

lstEmployees.DisplayMemberPath = "Field of Employee you want to see in the ListBox";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...