正如标题所暗示的那样,我尝试使用db查询的结果填充ListBox
,但我不确定如何管理它。我已设法从其他查询中填充DataGrid
,但我不确定如何对ListBox
执行相同操作。我确定它很简单,但我遗漏了一些东西!类似的溢出页面/谷歌搜索尚未得出明确的答案。我在Visual Studio的WPF应用程序中使用了c#。
在另一个班级,我有这个:
public DataTable FillAllMenuItems()
{
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\DustCatcher\Documents\pizzeria.mdf;Integrated Security=True;Connect Timeout=30");
SqlCommand cmd = new SqlCommand("SELECT name FROM MenuItems", con);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataTable dt = new DataTable("Menu Items");
sda.Fill(dt);
return dt;
}
顺便说一句,我确定上面的内容很混乱所以任何指针都会很棒(我在那里需要一个using
吗?)。在相关窗口cs文件中我有:
User user = User.GetInstance();
lstbxAllItems.ItemsSource = user.FillAllMenuItems().DefaultView;
运行应用时,ListBox
的{{1}}次数与数据库中的项目数相同。我哪里错了?
答案 0 :(得分:2)
您需要在lstbxAllItems.DisplayMemberPath
之后设置lstbxAllItems.ItemsSource
:
lstbxAllItems.DisplayMemberPath = "Name"; // Or any column you want to show in your ListBox
但作为更好的方法,您可以使用ListView.ItemTemplate
和Binding
来实现此目的。像这样:
<ListBox Name="lstbxAllItems">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"></TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 1 :(得分:1)
private void BindListbox()
{
myListBox.DataSource = dt;
myListBox.DisplayMemberPath = "Name";
}