如何根据WPF中的数据库查询创建按钮
我有很多我的小程序的分类项目列表。如何根据WPF中的数据库查询创建按钮
让我们假设我有一个名为糖果类别,并有100余项在类别糖果。
在这里,我通过查询它,
OleDbConnection dbConnect = new OleDBConnection("....");
dbConnect.Open();
string query = "SELECT ID, item FROM Items WHERE category == 'Candy'";
OleDBCommand executeCommand= new OleDBCommand(query, dbConnect);
OleDBDataReader reader = executeCommand.ExecuteReader();
结果可能是很多行,每一行都会有一个按钮的属性。一个新的按钮将被生成。
while(reader.Read()) {
// create multiple buttons for each row here..
}
现在的问题是,我想显示它在一个有限的高度和宽度的WrapPanel。 假设我只能在WrapPanel中显示10个按钮。但是,创建的按钮超过了50个。
解决此问题的最佳方法是什么?我想如果我可以修改查询10行,并创建10个按钮和另一个按钮与NEXT箭头将获取另外10个按钮。
我太困惑了。请帮助我提供更好的解决方案。
如果项目数量没有达到成千上万,如果让WPF为您管理视图,我认为您会更好(代码更少,代码更简单)。计划用户如何浏览按钮?它是一个滚动条吗?
另外,看看你的示例代码,看起来你打算在'while'循环内快速创建按钮。再次,虽然这是可能的方式,但这不是“教科书”解决方案或用于基于集合创建多个项目的简单解决方案。适合的范例是使用数据绑定到项目数组。
下面是一个例子:
在你的XAML文件中,定义一个<的ItemsControl >。给它一个名字(比如说ButtonsPanel),以便你可以从后面的代码中引用它。在后面的代码中,准备一个数组(或List,或从IEnumerable派生的任何东西),并将所有要显示的项目设置为该元素的ItemsSource。
ItemsControl是一个非常通用的项目控件。您可以定义ItemsPanel(即包含所有项目的面板)以及所有按钮的模板。
<ItemsControl x:Name="ButtonsPanel" Height="80" Width="50">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
EDIT(以下从user995387评语):
随着上一个/下一个按钮(也称为寻呼)数据绑定也是优选的范例。在你的控件的数据上下文(或者后面的代码)中有一个ObservableCollection和你想要呈现的10个项目。单击“下一步”按钮,可以替换整个集合或集合中的10个项目(清除和10个添加)或集合中项目的内容(在这种情况下,该项目必须触发INotifyPropertyChanged事件) - 哪一个对你更有意义。只有在创建10个新按钮(而不是更新每个按钮的内容)时才会选择最后一个选项,这会影响性能。
“带有下一个箭头的按钮将获取另外10个按钮。” 你的建议很有价值。 – user995387 2012-02-13 10:19:28
如果我更喜欢滚动条,我该如何添加它? – user995387 2012-02-16 06:53:02
@ user995387 - 如果您想拥有一个滚动条,您可以使用VerticalScrollBarVisibility =“Auto”将包装面板嵌入ScrollViewer元素中。不过,你最好忽略WrapPanel,只使用List(它有一个内置的滚动条)。 – Uri 2012-02-16 07:00:58
为什么不使用组合框或列表框,它看起来比它更适合您的需要,比无限的按钮... – SvenG 2012-02-13 08:37:28
@SvenG:我想这个界面触摸屏友好.. – user995387 2012-02-16 05:19:31