title: master detail using form and datagridview
body: <p>I'd like to do a master/detail page where the parent (customer info) is a form on the top half of the window and then a datagridview of orders on the lower half of the screen?</p>
  
  <p><a href="http://msdn.microsoft.com/en-us/library/y8c0cxey%28v=vs.100%29.aspx" rel="nofollow">I found an article where the example uses 2 datagridviews here</a> and trying to go from there.</p>
  
  <p>I'm starting out with single textbox that contains the ParentID (I'm using Northwind Customer/Orders). And this works just fine with existing records. How do I handle wanting to add a new Customer and Orders at the same time?</p>
  
  <pre><code>using System;
  using System.Data;
  using System.Data.SqlClient;
  using System.Windows.Forms;
  
  namespace WindowsFormsApplication1
  {
      public partial class Form1 : Form
      {
          DataSet data;
          private BindingSource masterBindingSource = new BindingSource();
          private BindingSource detailsBindingSource = new BindingSource();
  
          public Form1()
          {
              InitializeComponent();
          }
  
          private void GetData()
          {
              try
              {
                  // Specify a connection string. Replace the given value with a 
                  // valid connection string for a Northwind SQL Server sample
                  // database accessible to your system.
                  String connectionString = 
                      "Integrated Security=SSPI;Persist Security Info=False;" +
                      "Initial Catalog=Northwind;Data Source=.\\SQLEXPRESS";
                  SqlConnection connection = new SqlConnection(connectionString);
  
                  // Create a DataSet.
                  data = new DataSet();
                  data.Locale = System.Globalization.CultureInfo.InvariantCulture;
  
                  // Add data from the Customers table to the DataSet.
                  SqlDataAdapter masterDataAdapter = new
                      SqlDataAdapter("select * from Customers where CustomerID = @id", connection);                
                  masterDataAdapter.SelectCommand.Parameters.AddWithValue("@id", lblParentId.Text);
                  masterDataAdapter.Fill(data, "Customers");
  
                  // Add data from the Orders table to the DataSet.
                  SqlDataAdapter detailsDataAdapter = new
                      SqlDataAdapter("select * from Orders where CustomerID = @id", connection);
                  detailsDataAdapter.SelectCommand.Parameters.AddWithValue("@id", lblParentId.Text);
                  detailsDataAdapter.Fill(data, "Orders");
  
                  // Establish a relationship between the two tables.
                  DataRelation relation = new DataRelation("CustomersOrders",
                      data.Tables["Customers"].Columns["CustomerID"],
                      data.Tables["Orders"].Columns["CustomerID"]);
                  data.Relations.Add(relation);
  
                  // Bind the master data connector to the Customers table.
                  masterBindingSource.DataSource = data;
                  masterBindingSource.DataMember = "Customers";
  
                  // Bind the details data connector to the master data connector,
                  // using the DataRelation name to filter the information in the 
                  // details table based on the current row in the master table. 
                  detailsBindingSource.DataSource = masterBindingSource;
                  detailsBindingSource.DataMember = "CustomersOrders";
              }
              catch (SqlException)
              {
                  MessageBox.Show("To run this example, replace the value of the " +
                      "connectionString variable with a connection string that is " +
                      "valid for your system.");
              }
          }
  
          private void btnLoadDetail_Click(object sender, EventArgs e)
          {
              lblParentId.Text = textBox1.Text;
              GetData();
              //textBox1.DataBindings.Add("Text", data.Tables[0], "CustomerID");
              dataGridView1.DataSource = detailsBindingSource;
          }
      }
  }
  </code></pre>