0

Afternoon lads/lasses,

I'm trying to show data from a database table in a data grid but I'm getting a null exception.

Here's my code behind:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Configuration;
using System.Xml.Linq;

namespace LinkToSQL
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        LinqtoSQLDataClassesDataContext dataContext;

        public MainWindow()
        {
            string connectionString = ConfigurationManager.ConnectionStrings["LinkToSQL.Properties.Settings.MyFirstDBConnectionString"].ConnectionString;

            dataContext = new LinqtoSQLDataClassesDataContext(connectionString);

            InsertUniversity();
        }

        public void InsertUniversity()
        {
            University yale = new University();
            yale.Name = "Yale";
            dataContext.Universities.InsertOnSubmit(yale);
            dataContext.SubmitChanges();
            MainDataGrid.ItemsSource = dataContext.Universities;
        }
    }
}

When I run it, I get this exception which tells me that the dataGrid is null:

enter image description here

Here's my XAML:

<Window x:Class="LinkToSQL.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:LinkToSQL"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <DataGrid x:Name="MainDataGrid" VerticalAlignment="Center" HorizontalAlignment="Center" Height="400" Width="760"/>
    </Grid>
</Window>

Thanks in advance!

Thoanga
  • 41
  • 5
  • 3
    Did you delete `InitializeComponenet();` from `public MainWindow() {...}`? As you can see from the error it gives you, your dataGrid is null because it is not initialized. – Federico Rossi Mar 02 '20 at 13:51
  • 1
    Thanks dude, that was exactly it.. I can't believe I overlooked it – Thoanga Mar 02 '20 at 15:57

1 Answers1

1

Call InitializeComponent() the first thing you do in the constructor, before you access any elements that you have defined in the XAML markup:

public MainWindow()
{
    InitializeComponent();

    string connectionString = ConfigurationManager.ConnectionStrings["LinkToSQL.Properties.Settings.MyFirstDBConnectionString"].ConnectionString;

    dataContext = new LinqtoSQLDataClassesDataContext(connectionString);

    InsertUniversity();
}

What does InitializeComponent() do, and how does it work in WPF?

mm8
  • 163,881
  • 10
  • 57
  • 88