There are many times when your application needs to work with related tables. Although a dataset contains tables and columns as in a database, it does not inherently include a database’s ability to relate tables. However, you can create DataRelation objects that establish a relationship between a parent (master) and a child (detail) table based on a common key.
Relationships are created between matching columns in the parent and child tables. That is, the DataType value for both columns must be identical.
A DataRelation is used to relate two DataTable objects to each other through DataColumn objects. For example, in a Customer/Orders relationship, the Customers table is the parent and the Orders table is the child of the relationship. This is similar to a primary key/foreign key relationship.
It is important to understand the difference between a true join and the function of a DataRelation object. In a true join, records are taken from parent and child tables and put into a single, flat Recordset. When you use a DataRelation object, no new Recordset is created. Instead, the relation tracks the relationship between tables and keeps parent and child records in synch.
The sample code below shows a simple example of creating a master –detail relationship between two tables within a Dataset .We are making use of the sqlclient classes.
1]Drag and drop a datagrid control on a windows form.
2]Create appropiate data objects to access the data from data source.
- Sqlconnection
- SqlDataAdapter
- Dataset
3]Create a DataRelation object which expects the columns of the tables on which you want to set the relationship.
private void Form1_Load(object sender, System.EventArgs e)
{
//Creating a connection to the data source.
SqlConnection myconn=new SqlConnection(“data source=kedar;initial catalog=northwind;user id=sa;password=;”);
//Filling the dataset with appropiate tables.
SqlDataAdapter myda1=new SqlDataAdapter(“select * from orders”,myconn);
SqlDataAdapter myda2=new SqlDataAdapter(“select * from [order details] “,myconn);
DataSet myds=new DataSet();
myda1.Fill(myds,”orders”); myda1.Fill(myds,”orderdetails”);
//creating datacolumns on which you want to establish a relationship.
DataColumn parentcolumn =myds.Tables[“orders”].Columns[“orderid”] ;
DataColumn childcolumn =myds.Tables[“orderdetails”].Columns[“orderid”] ;
//Creating a datarelation object adding the columns on which relationship is set.
DataRelation mydr=new DataRelation(“childrecord”,parentcolumn,childcolumn);
//adding the relationship on the dataset.
myds.Relations.Add(mydr);
dataGrid1.DataSource =myds;
}