Warez_Willy

Newbie. I have a Master table [Current_Jobs] displayed in windows form Details format. On the same form I have the table [DeliveryDates] displayed as a data Grid View.

Everything works nicely

I have a "search" button that filters data results of [current_jobs]

When I run the search the Master table is filtered fine but all the child datagridview results dissappear.

I assume it's because I need to bind the datagridview control to a differnt source.. need help please!!



Re: Windows Forms Data Controls and Databinding Data Grid results dissapear when Master Table is Filtered

Rory (Clissold Solutions)

Do your master-detail like this example from FAQ 22 in the DataGridView FAQ.doc, then you should be able to filter the master by setting the masterBindingSource.Filter property :

How do I show master-details

One of the most common scenarios for using the DataGridView control is the master/detail form, in which a parent/child relationship between two database tables is displayed. Selecting rows in the master table causes the detail table to update with the corresponding child data.

Implementing a master/detail form is easy using the interaction between the DataGridView control and the BindingSource component. The below sample will show two related tables in the Northwind SQL Server sample database: Customers and Orders. By selecting a customer in the master DataGridView all the orders for the customer will appear in the detail DataGridView.

Code Snippet

using System;

using System.Data;

using System.Data.SqlClient;

using System.Windows.Forms;

public class Form1 : System.Windows.Forms.Form

{

private DataGridView masterDataGridView = new DataGridView();

private BindingSource masterBindingSource = new BindingSource();

private DataGridView detailsDataGridView = new DataGridView();

private BindingSource detailsBindingSource = new BindingSource();

[STAThreadAttribute()]

public static void Main()

{

Application.Run(new Form1());

}

// Initializes the form.

public Form1()

{

masterDataGridView.Dock = DockStyle.Fill;

detailsDataGridView.Dock = DockStyle.Fill;

SplitContainer splitContainer1 = new SplitContainer();

splitContainer1.Dock = DockStyle.Fill;

splitContainer1.Orientation = Orientation.Horizontal;

splitContainer1.Panel1.Controls.Add(masterDataGridView);

splitContainer1.Panel2.Controls.Add(detailsDataGridView);

this.Controls.Add(splitContainer1);

this.Load += new System.EventHandler(Form1_Load);

this.Text = "DataGridView master/detail demo";

}

private void Form1_Load(object sender, System.EventArgs e)

{

// Bind the DataGridView controls to the BindingSource

// components and load the data from the database.

masterDataGridView.DataSource = masterBindingSource;

detailsDataGridView.DataSource = detailsBindingSource;

GetData();

// Resize the master DataGridView columns to fit the newly loaded data.

masterDataGridView.AutoResizeColumns();

// Configure the details DataGridView so that its columns automatically

// adjust their widths when the data changes.

detailsDataGridView.AutoSizeColumnsMode =

DataGridViewAutoSizeColumnsMode.AllCells;

}

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=localhost";

SqlConnection connection = new SqlConnection(connectionString);

// Create a DataSet.

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", connection);

masterDataAdapter.Fill(data, "Customers");

// Add data from the Orders table to the DataSet.

SqlDataAdapter detailsDataAdapter = new

SqlDataAdapter("select * from Orders", connection);

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.");

}

}

}

Let me know how you get on,

- Rory

Technology Solutions - http://www.clissoldsolutions.com






Re: Windows Forms Data Controls and Databinding Data Grid results dissapear when Master Table is Filtered

Warez_Willy

Thanks Rory. I did start on reading that doc yesterday. I'm programming in VB.

Q: Is there a VB code equivalent I can use

I almost did find a solution by using "add query" to the binding source smart tag which plonks a fillby toolstrip on the form.

That works partially. But I am having trouble parsing parameters succesfully to my access database. So there's another Question

TA