Procédure pas à pas : création d'un formulaire maître/détail qui utilise deux contrôles DataGridView Windows Forms
L’un des scénarios les plus courants d’utilisation du DataGridView contrôle est le formulaire maître/détail dans lequel une relation parent/enfant entre deux tables de base de données est affichée. La sélection de lignes dans la table maître entraîne la mise à jour de la table de détails avec les données enfants correspondantes.
L’implémentation d’un formulaire maître/détail est facile à utiliser l’interaction entre le DataGridView contrôle et le BindingSource composant. Dans cette procédure pas à pas, vous allez générer le formulaire à l’aide de deux DataGridView contrôles et deux BindingSource composants. Le formulaire affiche deux tables associées dans l’exemple de base de données Northwind SQL Server : Customers
et Orders
. Lorsque vous avez terminé, vous aurez un formulaire qui affiche tous les clients de la base de données dans le maître DataGridView et toutes les commandes du client sélectionné en détail DataGridView.
Pour copier le code de cette rubrique en tant que liste unique, consultez Comment : créer un formulaire maître/détail à l’aide de deux contrôles DataGridView Windows Forms.
Prérequis
Pour réaliser cette procédure pas à pas, vous aurez besoin des éléments suivants :
- Accès à un serveur doté de l’exemple de base de données Northwind SQL Server.
Créer le formulaire
Pour créer un formulaire maître/détail
Créez une classe qui dérive de Form deux DataGridView contrôles et deux BindingSource composants. Le code suivant fournit une initialisation de formulaire de base et inclut une
Main
méthode. Si vous utilisez le concepteur Visual Studio pour créer votre formulaire, vous pouvez utiliser le code généré par le concepteur au lieu de ce code, mais veillez à utiliser les noms indiqués dans les déclarations de variables ici.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 Class
Implémentez une méthode dans la définition de classe de votre formulaire pour gérer les détails de la connexion à la base de données. Cet exemple utilise une
GetData
méthode qui remplit un DataSet objet, ajoute un DataRelation objet au jeu de données et lie les BindingSource composants. Veillez à définir la variableconnectionString
avec une valeur appropriée pour votre base de données.Important
Le stockage d'informations sensibles (telles qu'un mot de passe) dans la chaîne de connexion peut affecter la sécurité de votre application. L'utilisation de l'authentification Windows (également appelée sécurité intégrée) offre un moyen plus sûr de contrôler l'accès à une base de données. Pour plus d’informations, consultez Protection des informations de connexion.
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 Sub
Implémentez un gestionnaire pour l’événement de Load votre formulaire qui lie les DataGridView contrôles aux BindingSource composants et appelle la
GetData
méthode. L’exemple suivant inclut le code qui redimensionne les colonnes en fonction des données affichées DataGridView .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
Test de l’application
Vous pouvez maintenant tester le formulaire pour vous assurer qu’il se comporte comme prévu.
Pour tester le formulaire
Compilez et exécutez l'application.
Vous verrez deux DataGridView contrôles, un au-dessus de l’autre. En haut sont les clients de la table Northwind
Customers
, et en bas sont lesOrders
correspondants au client sélectionné. Lorsque vous sélectionnez différentes lignes dans le coin supérieur DataGridView, le contenu de la modification inférieure DataGridView en conséquence.
Étapes suivantes
Cette application vous donne une compréhension de base des DataGridView fonctionnalités du contrôle. Vous pouvez personnaliser l’apparence et le comportement du DataGridView contrôle de plusieurs façons :
Modifier les styles de bordure et d’en-tête. Pour plus d’informations, consultez How to : Change the Border and Gridline Styles in the Windows Forms DataGridView Control.
Activez ou limitez l’entrée utilisateur au DataGridView contrôle. Pour plus d’informations, consultez How to : Prevent Row Addition and Deletion in the Windows Forms DataGridView Control, and How to : Make Columns Read-Only in the Windows Forms DataGridView Control.
Validez l’entrée de l’utilisateur dans le DataGridView contrôle. Pour plus d’informations, consultez Procédure pas à pas : validation des données dans le contrôle DataGridView Windows Forms.
Gérez des jeux de données très volumineux à l’aide du mode virtuel. Pour plus d’informations, consultez Procédure pas à pas : implémentation du mode virtuel dans le contrôle DataGridView Windows Forms.
Personnalisez l’apparence des cellules. Pour plus d’informations, consultez How to : Customize the Appearance of Cells in the Windows Forms DataGridView Control and How to : Set Default Cell Styles for the Windows Forms DataGridView Control.
Voir aussi
.NET Desktop feedback
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour