Kapparino
Kapparino

Reputation: 988

WPF DataGrid Is Not Filled With Data

I have a problem filling DataGrid with data from DB (Sqlite) in my WPF C# Project.

I've defined DataGrid in my XAML file with a Name (dataGrid_Students):

<DataGrid Name="dataGrid_Students" Grid.Row="0" Grid.Column="0"
          RenderOptions.ClearTypeHint="Enabled"
          TextOptions.TextFormattingMode="Display"
          CanUserAddRows="False"
          CanUserDeleteRows="False"
          SelectionUnit="FullRow" 
          AutoGenerateColumns="false"  
          >
    <DataGrid.Columns>
        <DataGridTextColumn Header="Index Number" />
        <DataGridTextColumn Header="First Name" /> 
        <DataGridTextColumn Header="Last Name" /> 
    </DataGrid.Columns>
</DataGrid>

In my C# file in the constructor for this Window where DataGrid component is defined, I called the method initDataGrid();

public StudentForm() {
    InitializeComponent();
    this.WindowStartupLocation = WindowStartupLocation.CenterScreen;
    initDataGrid();
}

Which contains this code:

private void initDataGrid() { 
    //dataGrid_Student.DataContext = dbManager.Students; does not work
    dataGrid_Student.ItemsSource = dbManager.Students;
}

So the problem is my DataGrid is empty. I've checked if my Students list is maybe null, but it's not and it contains all the data. So what else I'm missing in order to fill the DataGrid with Data ?

UPDATE:

My Student class:

[Table("student")]
class Student {

    [Key] // this is a primary key in my table
    [Column(name:"brind")]
    public int Brind { get; set; }
    [Column(name:"first_name")]
    public string FirstName { get; set; }
    [Column(name:"last_name")]
    public string LastName { get; set; }
}

Binded my properties from Student class to this columns:

<DataGrid Name="dataGrid_Student" Grid.Row="0" Grid.Column="0"
          RenderOptions.ClearTypeHint="Enabled"
          TextOptions.TextFormattingMode="Display"
          CanUserAddRows="False"
          CanUserDeleteRows="False"
          SelectionUnit="FullRow" 
          AutoGenerateColumns="false"  
          >
    <DataGrid.Columns>
        <DataGridTextColumn Header="Index Number" Binding="{Binding Brind}" /> 
        <DataGridTextColumn Header="First Name"  Binding="{Binding FirstName}" />  
        <DataGridTextColumn Header="Last Name" Binding="{Binding LastName}" /> 
    </DataGrid.Columns>
</DataGrid>

DataGrid is still empty.

My dbManager instance is this class:

class ManagerDBContext : DbContext {

    public ManagerDBContext() : base("Student_DbContext") {
        Database.SetInitializer<ManagerDBContext>(null);
    }
    public DbSet<User> Users { get; set; }
    public DbSet<Student> Students { get; set; }
}

Upvotes: 1

Views: 1591

Answers (1)

Sajeetharan
Sajeetharan

Reputation: 222720

You are missing the Binding part for the columns, since you have set AutoGenerateColumns to be false,

<DataGrid.Columns>
        <DataGridTextColumn Header="Index Number" Binding="{Binding IndexNumber}" />
        <DataGridTextColumn Header="First Name" Binding="{Binding FirstName}"  /> 
        <DataGridTextColumn Header="Last Name" Binding="{Binding LastName}" /> 
</DataGrid.Columns>

Also you need to convert to List when you bind

private void initDataGrid() { 
    //dataGrid_Student.DataContext = dbManager.Students; does not work
    dataGrid_Student.ItemsSource = dbManager.Students.ToList();
}

Upvotes: 2

Related Questions