过滤/排序列表框项目

时间:2012-03-06 11:09:12

标签: c# visual-studio-2010 linq-to-sql xaml wpfdatagrid

我有一个列表框,其中的项目填充了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>

每个项目中有多个堆栈面板,每个堆栈面板都绑定到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 个答案:

答案 0 :(得分:-1)

我不认为直接过滤ListBox项目是个好主意。我建议采用不同的方法。

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

创建另一个列表DisplayList,该列表将用作ItemsSource的{​​{1}}。

现在,只要您想要提交项目,请在ListBox列表中应用过滤器,并将结果存储在AllItems

通过这种方式,您无需在非常时间查询数据库,还可以轻松过滤和排序DisplayList列表