数据网格不显示C#wpf应用程序中的数据

时间:2014-03-31 05:56:58

标签: c# sql-server wpf linq datagrid

在我的应用程序中,我使用了 visual studio 2012,MSSQL server 2012,wpf linq 。在那里,我必须使用数据库中的数据填充 datagrid 。我的 datagrid 如下所示。

<DataGrid HorizontalAlignment="Left" Height="189" Margin="10,10,0,0" VerticalAlignment="Top" Width="351" Name="StudentGrid" SelectionChanged="StudentGrid_SelectionChanged">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Student ID" Binding="{Binding Path=Student.StudentId}"/>
            <DataGridTextColumn Header="First Name" Binding="{Binding Path=Student.FirstName}"/>
            <DataGridTextColumn Header="Last Name" Binding="{Binding Path=Student.LastName}"/>
            <DataGridTextColumn Header="Gender" Binding="{Binding Path=Student.Gender}"/>
        </DataGrid.Columns>
</DataGrid>

我的寡妇加载方法如下。

private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        SchoolDataDataContext con = new SchoolDataDataContext();
        List<Student> students = (from s in con.Students
                                  select s).ToList<Student>();
        StudentGrid.ItemsSource = students;
    }

但是当程序执行时,尽管数据库中的student表包含数据,但datagrid并不显示单个数据。

enter image description here

我该如何解决这个问题。

好的,我改变了数据网格,如下所述,答案如下,但没有任何变化。

 <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" HorizontalAlignment="Left" Height="191" Margin="23,24,0,0" VerticalAlignment="Top" Width="447" Name="StudentGrid" >
        <DataGrid.Columns>
            <DataGridTextColumn Header="Student ID" Binding="{Binding Path=StudentId}"/>
            <DataGridTextColumn Header="First Name" Binding="{Binding Path=FirstName}"/>
            <DataGridTextColumn Header="Last Name" Binding="{Binding Path=LastName}"/>
            <DataGridTextColumn Header="Gender" Binding="{Binding Path=Gender}"/>

        </DataGrid.Columns>
    </DataGrid>

4 个答案:

答案 0 :(得分:2)

您应该使用 ItemsSource =&#34; {Binding}&#34; AutoGenerateColumns =&#34; False&#34;

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" HorizontalAlignment="Left" Height="189" Margin="10,10,0,0" VerticalAlignment="Top" Width="351" Name="StudentGrid" SelectionChanged="StudentGrid_SelectionChanged">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Student ID" Binding="{Binding Path=Student.StudentId}"/>
            <DataGridTextColumn Header="First Name" Binding="{Binding Path=Student.FirstName}"/>
            <DataGridTextColumn Header="Last Name" Binding="{Binding Path=Student.LastName}"/>
            <DataGridTextColumn Header="Gender" Binding="{Binding Path=Student.Gender}"/>
        </DataGrid.Columns>
</DataGrid>

答案 1 :(得分:1)

如果你已经设置了DataContext,那么只使用ItemsSource = {Binding}。

这看起来可能是由两件事中的一件造成的。

 <DataGridTextColumn Header="Student ID" Binding="{Binding Path=StudentId}"/>
 <DataGridTextColumn Header="First Name" Binding="{Binding Path=FirstName}"/>
 <DataGridTextColumn Header="Last Name" Binding="{Binding Path=LastName}"/>
 <DataGridTextColumn Header="Gender" Binding="{Binding Path=Gender}"/>

如果您已将ItemsSource设置为所需的Generic列表,则只需将Path设置为成员名称,而不是Object名称。喜欢上面..

检查学生班级中的成员是否公开,他们需要这样才能使其工作。

并最后检查您的列表是否为空,以便您知道这不是问题。

答案 2 :(得分:0)

您可以尝试在数据网格的xaml代码中使用ItemsSource="{Binding}"

答案 3 :(得分:0)

首先,您必须将相同的datacontext分配给您正在使用的网格,即SchoolDataDataContext,然后您应该设置项目来源(同时确保您的项目源中有记录)

这是完整的指南

Guide1 Guide2