代码之家  ›  专栏  ›  技术社区  ›  Antony

使用selectionmode=multiple绑定列表框的最有效方法

  •  0
  • Antony  · 技术社区  · 14 年前

    我有一个具有列表框的ASP.NET Web窗体( lbxRegions )启用多重选择选项。在我的数据库中,我有一个带有XML字段的表,其中包含区域列表。我需要用所有可用区域填充列表框,然后“勾选”与db表中的区域匹配的列表项。列表选项还需要按区域名称排序。所以,我写了下面的代码,它工作得很好——没有问题。但我想知道是否有人能想出一个更好(更简洁、更有效)的方法来做同样的事情。事先谢谢。

            Dim allRegions = XElement.Load(Server.MapPath(Request.ApplicationPath) & "\Regions.xml").<country>.<regions>.<region>
            Dim selectedRegions = (From ev In dc.Events Where ev.EventId = 2951).Single.CEURegions.<country>.<regions>.<region>
            Dim unselectedRegions = allRegions.Except(selectedRegions)
    
            Dim selectedItems = From x In selectedRegions Select New ListItem() _
                                    With {.Value = x.@code, .Text = x.Value, .Selected = True}
    
            Dim unselectedItems = From x In unselectedRegions Select New ListItem() _
                                    With {.Value = x.@code, .Text = x.Value}
    
            Dim allItems = selectedItems.Union(unselectedItems).OrderBy(Function(x) x.Text)
    
            lbxRegions.Items.AddRange(allItems.ToArray())
    

    另外,如果你愿意,你可以用C发布代码。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Amy B    14 年前
    allRegions = GetAllRegions();
    selectedRegions = GetSelectedRegions();
    
    allItems = from r in allRegions
      select new ListItem()
      {
        Value = ...
        Text = ...
        Selected = selectedRegions.Contains(r);
      } into item
      order by item.Text
      select item;
    

    lbxRegions.Items.AddRange(allItems.ToArray()) 
    

    AddRange IEnumerable<T> ,所以打电话给 ToArray 不需要。