使用WPF中的ListBox绑定DataTable对象,使用Windows窗体应用程序中的ListBox绑定DataTable对象

时间:2016-01-21 08:32:37

标签: c# wpf xaml datatable listbox

我在Windows窗体应用程序中按照youtube教程学到了这一点,但是我很难在WPF中实现相同的方法。

private void PopulateNames()
{
    using (connection = new SqlConnection(connection_string))
    using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM namesTable", connection))
    {
        DataTable namesTable = new DataTable();
        adapter.Fill(namesTable);
        Debug.Write(namesTable.AsDataView());

        namesListBox.DisplayMemberPath = "name";
        namesListBox.SelectedValuePath = "Id";
        namesListBox.ItemsSource = namesTable.AsDataView();
    }
}

ListView的XAML是

<Grid>
    <ListBox ItemsSource="{Binding}" DisplayMemberPath="name" x:Name="namesListBox" 
             HorizontalAlignment="Left" Height="209" Margin="90,59,0,0" 
             VerticalAlignment="Top" Width="341" SelectionChanged="listBox_SelectionChanged"/>
</Grid>

我无法理解我在MSDN上遇到了什么问题以及有关此问题的关于stackoverflow的许多问题,但由于我是新手,因此我可能没有得到我想要的答案。

所以我的问题是 WPF和Windows窗体应用程序中的数据绑定有何不同认为WinForms应用程序中的实现非常简单,我无法弄清楚如何填充ListBox与数据库中的条目。

1 个答案:

答案 0 :(得分:1)

您的代码没有任何问题,它应该有效。可能你错过了调用PopulateNames方法。

此处您在XAML中不需要ItemsSource="{Binding}"DisplayMemberPath="name",因为您已将其设置在您的代码中。

如果你想在你的XAML中这样做,你可以这样做:

private void PopulateNames()
{
    using (connection = new SqlConnection(connection_string))
    using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM namesTable", connection))
    {
        DataTable namesTable = new DataTable();
        adapter.Fill(namesTable);
        Debug.Write(namesTable.AsDataView());
        DataContext = namesTable.AsDataView();
    }
}

在你的XAML中:

<ListBox ItemsSource="{Binding}" DisplayMemberPath="name" SelectedValuePath="Id" 
         x:Name="namesListBox" HorizontalAlignment="Left" Height="209" 
         VerticalAlignment="Top" />