使用SelectionMode = Multiple绑定Listbox的最有效方法

时间:2010-06-03 21:40:10

标签: asp.net linq

我有一个ASP.NET网络表单,其中包含一个启用了多选选项的列表框(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())

P.S。如果您愿意,可以在C#中发布代码。

1 个答案:

答案 0 :(得分:1)

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