Lars Boele
Lars Boele

Reputation: 375

Fill dataGrid from MySQL database in C# WPF

I want to fill a dataGrid in my WPF application.

My XAML:

<DataGrid AutoGenerateColumns="True" Height="200" HorizontalAlignment="Left" 
Margin="102,72,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="848" />

My code behind:

  public void FillGrid()
    {
        string MyConString =    
        "SERVER=myserver.com;" +
        "DATABASE=mydatabase;" +
        "UID=myuserid;" +
        "PASSWORD=mypass;";

        string sql = "SELECT clientnr, name, address FROM clients ORDER BY name";

        MySqlConnection connection = new MySqlConnection(MyConString);
        MySqlCommand cmdSel = new MySqlCommand(sql, connection);
        DataTable dt = new DataTable();
        MySqlDataAdapter da = new MySqlDataAdapter(cmdSel);
        da.Fill(dt);
        dataGrid1.DataContext = dt;
    }

I'm sure that the MySQL part is correct, it does not give any errors. VS10 express doesn't give any errors. But if i execute the method my dataGrid won't be filled.

What I'm doing wrong?

Thanks in advance!

Upvotes: 6

Views: 31539

Answers (5)

Guest28512
Guest28512

Reputation: 21

I always use this code to display/fill data in my Datagrid:

SqlConnection con = new SqlConnection("your connection string");
    
private void LoadGrid()
    {
        SqlCommand cmd = new SqlCommand("Select * From XXX;", con);
        DataTable dt = new DataTable();
        con.Open();
        SqlDataAdapter sdr = new SqlDataAdapter(cmd);
        sdr.Fill(dt);
        dataGrid.ItemsSource = dt.DefaultView;
        con.Close();
    }

Upvotes: 1

thomiel
thomiel

Reputation: 2937

Replace

dataGrid1.DataContext = dt; 

with

dataGrid1.ItemsSource = dt.DefaultView;

Upvotes: 3

Daniel-ito
Daniel-ito

Reputation: 19

Just call the method FillGrid() after InitializeComponents() in your code behind. I just did that and it runs perfectly.

Upvotes: 1

Jon
Jon

Reputation: 150

You definitely want it to be bound to the DataTable and not the Adapter, as Rachel suggested (the adapter's job is to populate the DataTable). Also, it's good to enclose connections and commands in usings to make sure everything is cleaned up, like this:

public void FillGrid()
{
    string MyConString =
    "SERVER=myserver.com;" +
    "DATABASE=mydatabase;" +
    "UID=myuserid;" +
    "PASSWORD=mypass;";

    string sql = "SELECT clientnr, name, address FROM clients ORDER BY name";

    using (MySqlConnection connection = new MySqlConnection(MyConString))
    {
        connection.Open();
        using (MySqlCommand cmdSel = new MySqlCommand(sql, connection))
        {
            DataTable dt = new DataTable();
            MySqlDataAdapter da = new MySqlDataAdapter(cmdSel);
            da.Fill(dt);
            dataGrid1.DataContext = dt;
        }
        connection.Close();
    }
}

Upvotes: 4

Rachel
Rachel

Reputation: 132548

Set your DataGrid's binding:

<DataGrid ItemsSource="{Binding }" />

Upvotes: 6

Related Questions