我有一个列表框,其中的项目填充了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。)
答案 0 :(得分:-1)
我不认为直接过滤ListBox
项目是个好主意。我建议采用不同的方法。
创建一个将从SQL数据库填充一次的列表AllItems
。此列表将包含必须在列表框中显示的所有记录,换句话说,它将是可以显示的超级记录集。
创建另一个列表DisplayList
,该列表将用作ItemsSource
的{{1}}。
现在,只要您想要提交项目,请在ListBox
列表中应用过滤器,并将结果存储在AllItems
。
通过这种方式,您无需在非常时间查询数据库,还可以轻松过滤和排序DisplayList
列表