Reputation: 375
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
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
Reputation: 2937
Replace
dataGrid1.DataContext = dt;
with
dataGrid1.ItemsSource = dt.DefaultView;
Upvotes: 3
Reputation: 19
Just call the method FillGrid()
after InitializeComponents()
in your code behind. I just did that and it runs perfectly.
Upvotes: 1
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
Reputation: 132548
Set your DataGrid's binding:
<DataGrid ItemsSource="{Binding }" />
Upvotes: 6