【问题标题】:How do I Fill a Listbox with a List using a datatable as the source如何使用数据表作为源用列表填充列表框
【发布时间】:2011-11-07 02:37:06
【问题描述】:

我有一个数据表,其中包含我想用于列表的列。为了测试我的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 只是一个测试。

【问题讨论】:

    标签: c# wpf listbox


    【解决方案1】:

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

    绑定后,您可以使用 ListBoxItem 模板并绑定到 Employee 对象中的字段。

    编辑示例

    如果您的 Employee 类如下所示:

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

    然后您将设置 lstEmployees.DisplayMemberPath = "LoginId"。您可以在 ListBox XAML 或代码隐藏中设置它。

    【讨论】:

    • 我以为你的意思是这样的:lstEmployees.DisplayMemberPath = "LoginId";但这也不起作用。我没有在我的列表框中获取值,而是得到 3 个空白行,顺便说一句,这是应该在列表中显示的正确数量的项目。
    【解决方案2】:

    在设置 ItemsSource 之后你也应该这样做

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

    【讨论】:

      【解决方案3】:
      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";
      }
      

      【讨论】:

        猜你喜欢
        • 2014-01-27
        • 2021-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多