miércoles, 25 de enero de 2012

Windows Forms DataGridView Maestro/ Detalle


Introduction

This example demonstrates a Windows Forms equivalent to the Microsoft Access one-to-many form by binding a DataSet containing a DataRelation between 2 DataTables to a DataGridView resulting in Parent/Child views.

Building the Sample

This sample was built using Visual Studio 2010.
Description
In Microsoft Access you can create a form that contains a subform (a one-to-many form) which is useful when working with relational data.  For this sample we'll use the Customer Orders scenario giving the user a way to view both Customer and related Order data at the same time by creating a Parent/Child view on a Windows Form using DataGridViews.  This is accomplished through the use of a DataRelation between two DataTable objects in a DataSet which are bound to DataGridViews.
Below is a code snippet from Form1.cs which creates the DataSet, DataTables, DataRelation, adds test data, and binds the data to DataGridViews.
The purpose of this sample is to fulfill a code sample request.  I hope this helps.
C#
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
 
namespace FormSubformEquivalent 
{ 
    /// <summary> 
    /// This class demonstrates the use of DataTables and DataRelations, 
    /// creating Master/Child views to mimic a one-to-many form  
    /// (form/subform) in Microsoft Access.  This should be considered a  
    /// starting point. 
    /// </summary> 
    public partial class Form1 : Form 
    { 
        private DataTable tblCustomer; 
        private DataTable tblOrder; 
        private DataSet tblDataSet; 
 
        public Form1() 
        { 
            InitializeComponent(); 
 
            // Create Tables 
            tblCustomer = new DataTable("tblCustomer"); 
            tblOrder = new DataTable("tblOrder"); 
 
            // Create DataSet 
            tblDataSet = new DataSet(); 
 
            // Create Columns and Add to Tables 
            tblCustomer.Columns.Add("ID"typeof(int)); 
            tblCustomer.Columns.Add("CustomerName"typeof(string)); 
            tblOrder.Columns.Add("ID"typeof(int)); 
            tblOrder.Columns.Add("Order"typeof(string)); 
            tblOrder.Columns.Add("CustomerID"typeof(int)); 
 
            // Add Test Data 
            tblCustomer.Rows.Add(1"Jane Doe"); 
            tblCustomer.Rows.Add(2"John Smith"); 
            tblCustomer.Rows.Add(3"Richard Roe"); 
            tblOrder.Rows.Add(1"Order1.1"1); 
            tblOrder.Rows.Add(2"Order1.2"1); 
            tblOrder.Rows.Add(3"Order1.3"1); 
            tblOrder.Rows.Add(4"Order2.1"2); 
            tblOrder.Rows.Add(5"Order3.1"3); 
            tblOrder.Rows.Add(6"Order3.2"3); 
             
            // Add Tables to DataSet 
            tblDataSet.Tables.Add(tblCustomer); 
            tblDataSet.Tables.Add(tblOrder); 
 
            // Create Relation 
            tblDataSet.Relations.Add("CustOrderRelation", 
                tblCustomer.Columns["ID"], tblOrder.Columns["CustomerID"]); 
 
            BindingSource bsCustomer = new BindingSource(); 
            bsCustomer.DataSource = tblDataSet; 
            bsCustomer.DataMember = "tblCustomer"; 
 
            BindingSource bsOrder = new BindingSource(); 
            bsOrder.DataSource = bsCustomer; 
            bsOrder.DataMember = "CustOrderRelation"; 
 
            // Bind Data to DataGridViews 
            dgvCustomer.DataSource = bsCustomer; 
            dgvOrder.DataSource = bsOrder; 
        } 
    } 
} 


No hay comentarios:

Publicar un comentario