2012-03-06 88 views
1

我有充满stackpanels项目,如列表框:筛选/排序列表框项目

<StackPanel Orientation="Horizontal" Margin="5"> 
       <TextBlock x:Name="accessionNumber" Text="{Binding Path=accessionNumber}" /> 
       <TextBlock Text="{Binding Path=orderRadDept}" Margin="20,0,0,0"/> 
      </StackPanel> 

有每个项目的多个stackpanels每个StackPanel中被绑定到SQL数据库不同的值。

我想筛选/排序列表框项目,而不必每次都重新查询数据库。

例如,

IEnumerable<radOrder> filteredOrders2 = 
       dc.radOrders.Where(o => o.orderRadDept == "CT") 
        .OrderBy(o => o.orderDateTime); 
      OnScreenList.ItemsSource = filteredOrders2; 

...会做什么,我需要通过查询数据库,并返回我想要的物品做。但是,如果我们这样做,我们将会损失业绩。

我想要做的是拿OnScreenList,只是排序/过滤它,这是我遇到问题。

这是据我已经得到了:

   List<ListItem> list = new List<ListItem>(OnScreenList.Items.Cast<ListItem>()); 
      list.Sort(); 

...和我被困试图参阅列表项的数据成员。

任何帮助或提示,将不胜感激。

(很抱歉,如果这是一个愚蠢的问题。我想教自己的同时C#,SQL,和WPF/XAML所有。)

回答

-1

我不认为这会是不错的主意直接筛选ListBox项目。我会建议一种不同的方法。

创建将从SQL数据库填充一次的列表AllItems。该列表将具有必须在列表框中显示的所有记录,换句话说,它将是可以显示的超级记录集合。

创建另一个列表DisplayList它将用作ListBoxItemsSource

现在,无论何时您想要过滤这些项目,请在AllItems列表上应用过滤器,并将结果存储在DisplayList中。

这样你就不会需要查询数据库很长的时间,再加上你可以很容易地过滤和排序DisplayList列表

+0

,我想知道为什么-1?这种方法有什么问题?请解释一下,以免我再犯这个错误 – 2012-03-13 15:37:29