使用db查询结果填充ListBox

时间:2015-12-07 15:36:20

标签: c# wpf database listbox

正如标题所暗示的那样,我尝试使用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}}次数与数据库中的项目数相同。我哪里错了?

2 个答案:

答案 0 :(得分:2)

您需要在lstbxAllItems.DisplayMemberPath之后设置lstbxAllItems.ItemsSource

lstbxAllItems.DisplayMemberPath = "Name"; // Or any column you want to show in your ListBox

但作为更好的方法,您可以使用ListView.ItemTemplateBinding来实现此目的。像这样:

<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";
}