【问题标题】:Populate ListBox with linq query - Value not getting set使用 linq 查询填充 ListBox - 未设置值
【发布时间】:2012-11-18 02:01:00
【问题描述】:

谁能告诉我为什么这不会将 ListItems 上的值设置为 ID? Value 和 Text 都以 DISPLAY_NAME 的形式出现

  lstSelected.DataSource = entities.User
     .Where(x => SelectedItems.Contains(x.ID))
     .Select(x => new ListItem { Text = x.DISPLAY_NAME, Value = x.ID })
     .ToList<ListItem>();

  lstSelected.DataBind();

【问题讨论】:

  • 你得到一个空列表吗?还是包含空白或垃圾的填充列表?
  • 该死的。没关系。这是绑定,而不是 linq。我没有意识到我需要在列表框上设置 DataValueField 和 DataTextField。对于列表项,它几乎应该是自动的

标签: c# linq data-binding listbox


【解决方案1】:

尝试设置DisplayMemberValueMember 属性(或者DataTextFieldDataValueField,如果您使用的是asp.net)

lstSelected.DisplayMember = "DISPLAY_NAME";
lstSelected.ValueMember = "ID";
lstSelected.DataSource = entities.User
     .Where(x => SelectedItems.Contains(x.ID))
     .ToList();
lstSelected.DataBind();

【讨论】:

    【解决方案2】:

    您有 2 个选项(您都以错误的方式使用):

    设置DataSourceDataTextFieldDataValueField

    lstSelected.DataSource = entities.User
           .Where(x => SelectedItems.Contains(x.ID))
           .ToList<ListItem>();
    
    lstSelected.DataTextField = "DISPLAY_NAME";
    lstSelected.DataValueField = "ID";
    
    lstSelected.DataBind();
    

    或实例化ListItems 并将它们添加到您的ListBox

    List<ListItem> mySelectedItems  = entities.User
           .Where(x => SelectedItems.Contains(x.ID))
           .Select(x => new ListItem { Text = x.DISPLAY_NAME, Value = x.ID })
           .ToList<ListItem>();
    
    foreach(ListItem item in mySelectedItems)
    {
        lstSelected.Items.Add(item);
    }
    lstSelected.DataBind();
    

    【讨论】:

      猜你喜欢
      • 2019-05-12
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      • 1970-01-01
      • 2016-03-12
      • 1970-01-01
      相关资源
      最近更新 更多