用数据库查询结果填充ListBox

本文关键字:填充 ListBox 结果 查询 数据库 | 更新日期: 2023-09-27 18:25:56

正如标题所示,我正在尝试用数据库查询的结果填充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吗?)。在相关的windows cs文件上,我有:

User user = User.GetInstance();
lstbxAllItems.ItemsSource = user.FillAllMenuItems().DefaultView;

运行应用程序时,ListBoxSystem.Data.DataRowView次数与数据库中项目的次数一样多。我哪里错了?

用数据库查询结果填充ListBox

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

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>
private void BindListbox() 
{
    myListBox.DataSource = dt;
    myListBox.DisplayMemberPath = "Name";
}