Demonstra Passo a passo: Criando um formulário mestre/detalhes com dois controles de Windows Forms DataGridView
Um dos cenários mais comuns para usar o DataGridView o controle é o mestre/detalhes formulário, no qual uma relação pai/filho entre duas tabelas de banco de dados é exibida.Selecionando linhas na tabela mestre faz com que a tabela de detalhes atualizar com os dados correspondentes do filho.
Implementando um formulário mestre/detalhe é fácil de usar a interação entre o DataGridView controle e o BindingSource componente. Nesta explicação passo a passo, você criará o formulário usando dois DataGridView controles e dois BindingSource componentes. O formulário mostrará duas tabelas relacionadas no banco de dados de exemplo Northwind SQL servidor: Customers e Orders.Quando tiver terminado, você terá um formulário que mostra todos os clientes no banco de dados no mestre DataGridView e todos os pedidos do cliente selecionado em detalhes DataGridView.
Para copiar o código deste tópico como uma única lista, consulte Como: Criar um formulário mestre/detalhes com dois controles de Windows Forms DataGridView.
Pré-requisitos
A fim de concluir este explicação passo a passo, será necessário:
- Acesso a um servidor que tem o banco de dados de exemplo Northwind SQL Server.
Criar o formulário
Para criar um formulário mestre/detalhes
Criar uma classe que deriva de Form e contém dois DataGridView controles e dois BindingSource componentes. O código a seguir fornece a inicialização do formulário básico e inclui um Main método. Se você usar o Visual Studio Designer para criar o seu formulário, você pode usar o código gerado designer em vez desse código, mas certifique-se de usar os nomes mostrados na aqui as declarações de variáveis.
Imports System Imports System.Data Imports System.Data.SqlClient Imports System.Windows.Forms Public Class Form1 Inherits System.Windows.Forms.Form Private masterDataGridView As New DataGridView() Private masterBindingSource As New BindingSource() Private detailsDataGridView As New DataGridView() Private detailsBindingSource As New BindingSource() <STAThreadAttribute()> _ Public Shared Sub Main() Application.Run(New Form1()) End Sub ' Initializes the form. Public Sub New() masterDataGridView.Dock = DockStyle.Fill detailsDataGridView.Dock = DockStyle.Fill Dim splitContainer1 As New SplitContainer() splitContainer1.Dock = DockStyle.Fill splitContainer1.Orientation = Orientation.Horizontal splitContainer1.Panel1.Controls.Add(masterDataGridView) splitContainer1.Panel2.Controls.Add(detailsDataGridView) Me.Controls.Add(splitContainer1) Me.Text = "DataGridView master/detail demo" End Sub ... End Class
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"; } ... }
Implemente um método na definição de classe do formulário para lidar com os detalhes da conexão com o banco de dados.Este exemplo usa um GetData método que preenche uma DataSet objeto, adiciona um DataRelation objeto para o conjunto de dados e os vínculos a BindingSource componentes. Certifique-se de conjunto o connectionString variável para um valor que seja apropriado para seu banco de dados.
Observação de segurança: Armazenar informações confidenciais, sistema autônomo uma senha, dentro da cadeia de conexão podem afetar a segurança do seu aplicativo.Usando a autenticação do Windows (também conhecida como segurança integrada) é uma maneira mais segura de controlar o acesso a um banco de dados.Para obter mais informações, consulte Proteger seqüências de caracteres de conexão.
Private Sub 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. Dim connectionString As String = _ "Integrated Security=SSPI;Persist Security Info=False;" & _ "Initial Catalog=Northwind;Data Source=localhost" Dim connection As New SqlConnection(connectionString) ' Create a DataSet. Dim data As New DataSet() data.Locale = System.Globalization.CultureInfo.InvariantCulture ' Add data from the Customers table to the DataSet. Dim masterDataAdapter As _ New SqlDataAdapter("select * from Customers", connection) masterDataAdapter.Fill(data, "Customers") ' Add data from the Orders table to the DataSet. Dim detailsDataAdapter As _ New SqlDataAdapter("select * from Orders", connection) detailsDataAdapter.Fill(data, "Orders") ' Establish a relationship between the two tables. Dim relation As 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 ex As SqlException MessageBox.Show("To run this example, replace the value of the " & _ "connectionString variable with a connection string that is " & _ "valid for your system.") End Try End Sub
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."); } }
Implementar um manipulador para Load evento que vincula o DataGridView os controles para o BindingSource componentes e chama o GetData método. O exemplo a seguir inclui código que redimensiona DataGridView colunas para ajuste os dados exibidos.
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles Me.Load ' 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 End Sub
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; }
Testando o aplicativo
Agora você pode testar o formulário para certificar-se de que ele funciona comforme o esperado.
Para testar o formulário
Compile e execute o aplicativo.
Você verá dois DataGridView controles, um acima do Outros. Na parte superior são os clientes do Northwind Customers tabela e na parte inferior são o Orders correspondente para o cliente selecionado. À medida que você selecionar linhas diferentes no superior DataGridView, o Sumário da parte inferior DataGridView alterar adequadamente.
Próximas etapas
Este aplicativo oferece a você uma compreensão básica do DataGridView recursos do controle. Você pode personalizar a aparência e comportamento do DataGridView controle de várias maneiras:
Alterar estilos de borda e cabeçalho.Para obter mais informações, consulte Como: Alterar a borda e estilos de linha de grade no Windows Forms DataGridView controle.
Permitir ou restringir entrada de usuário para o DataGridView controle. Para obter mais informações, consulte Como: Impedir a inclusão de linha e exclusão in Windows Forms DataGridView controle e Como: Tornar colunas somente leitura Windows Forms DataGridView controle.
Validar entrada do usuário para o DataGridView controle. Para obter mais informações, consulte Demonstra Passo a passo: Validando dados no controle do Windows Forms DataGridView.
Lidam com grandes conjuntos de dados usando o modo virtual.Para obter mais informações, consulte Demonstra Passo a passo: Implementando o modo virtual no Windows Forms DataGridView controle.
Personalize a aparência de células.Para obter mais informações, consulte Como: Personalizar a aparência de células em Windows Forms DataGridView controle e Como: conjunto estilos de célula padrão para o Windows Forms DataGridView controle.
Consulte também
Tarefas
Como: Criar um formulário mestre/detalhes com dois controles de Windows Forms DataGridView
Conceitos
Proteger seqüências de caracteres de conexão