Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Ett av de vanligaste scenarierna för att använda DataGridView-kontrollen är huvud-/detaljformuläret, där en huvud-/underordnad relation mellan två databastabeller presenteras. Om du markerar rader i huvudtabellen uppdateras detaljtabellen med motsvarande underordnade data.
Det är enkelt att implementera ett huvud-/informationsformulär med hjälp av interaktionen mellan DataGridView-kontrollen och komponenten BindingSource. I den här genomgången skapar du formuläret med hjälp av två DataGridView kontroller och två BindingSource komponenter. Formuläret visar två relaterade tabeller i Northwind SQL Server-exempeldatabasen: Customers och Orders. När du är klar har du ett formulär som visar alla kunder i databasen i huvud-DataGridView och alla beställningar för den valda kunden i detalj DataGridView.
Om du vill kopiera koden i det här avsnittet som en enda lista kan du läsa Hur du: Skapar ett huvud-/detaljformulär med två Windows Forms DataGridView-kontroller.
Förutsättningar
För att slutföra den här genomgången behöver du:
- Åtkomst till en server som har exempeldatabasen Northwind SQL Server.
Skapa formuläret
Så här skapar du ett huvud-/informationsformulär
Skapa en klass som härleds från Form och innehåller två DataGridView kontroller och två BindingSource komponenter. Följande kod ger grundläggande formulärinitiering och innehåller en
Main-metod. Om du använder Visual Studio-designern för att skapa formuläret kan du använda den designergenererade koden i stället för den här koden, men se till att använda namnen som visas i variabeldeklarationerna här.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"; }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 ClassImplementera en metod i formulärets klassdefinition för att hantera information om hur du ansluter till databasen. I det här exemplet används en
GetData-metod som fyller i ett DataSet-objekt, lägger till ett DataRelation objekt i datauppsättningen och binder BindingSource komponenter. Se till att ange variabelnconnectionStringtill ett värde som är lämpligt för databasen.Viktigt!
Lagring av känslig information, till exempel ett lösenord, i anslutningssträngen kan påverka programmets säkerhet. Att använda Windows-autentisering (även kallat integrerad säkerhet) är ett säkrare sätt att styra åtkomsten till en databas. Mer information finns i Skydda anslutningsinformation.
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."); } }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 SubImplementera en hanterare för formulärets Load händelse som binder DataGridView-kontrollerna till BindingSource-komponenterna och anropar metoden
GetData. I följande exempel ingår kod som ändrar storlek på DataGridView kolumner så att de passar de data som visas.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 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
Testa programmet
Nu kan du testa formuläret för att se till att det fungerar som förväntat.
Testa formuläret
Kompilera och kör programmet.
Du ser två DataGridView kontroller, en ovanför den andra. Längst upp finns kunderna från tabellen Northwind
Customersoch längst ned är deOrderssom motsvarar den valda kunden. När du väljer olika rader i det övre DataGridViewändras innehållet i den nedre DataGridView därefter.
Nästa steg
Det här programmet ger dig en grundläggande förståelse för funktionerna i DataGridView kontroll. Du kan anpassa utseendet och beteendet för den DataGridView kontrollen på flera sätt:
Ändra kantlinje och rubrikformat. Mer information finns i Hur du ändrar kant- och rutnätsstilar i Windows Forms DataGridView Control.
Aktivera eller begränsa användarindata till DataGridView-kontrollen. För mer information, se Hur du: Förhindrar tillägg och radering av rader i Windows Forms DataGridView-kontrollen, och Hur du: Skapar kolumner Read-Only i Windows Forms DataGridView-kontrollen.
Verifiera inmatning av användardata till kontrollen DataGridView. Mer information finns i Steg-för-steg-genomgång: Validering av data i Windows Forms DataGridView Control.
Hantera mycket stora datauppsättningar med hjälp av virtuellt läge. Mer information hittar du i Guide: Implementera virtuellt läge i Windows Forms DataGridView-kontrollen.
Anpassa utseendet på celler. Mer information finns i Så här: Anpassa utseendet på celler i Windows Forms DataGridView Control och Så här: Ange standardcellformat för Windows Forms DataGridView Control.
Se även
.NET Desktop feedback