Comment : utiliser le contrôle DataGrid sur Pocket PC
Mise à jour : novembre 2007
Cet exemple montre des techniques permettant d'utiliser le contrôle DataGrid avec des formulaires pour l'affichage et la modification d'un enregistrement qui est sélectionné dans le contrôle DataGrid, ainsi que d'ajouter un nouvel enregistrement à la base de données. Notez qu'une interface utilisateur doit être fournie pour modifier des valeurs DataGrid, car la modification des cellules DataGrid n'est pas prise en charge dans le .NET Compact Framework. Cet exemple utilise la base de données Northwind, installée avec Visual Studio.
Remarque : |
---|
Si vous utilisez le .NET Compact Framework version 2.0, vous devez ajouter une référence à System.Windows.Forms.DataGrid.dll dans le projet pour pouvoir utiliser le contrôle DataGrid. |
Un objet BindingSource permet d'accéder à l'enregistrement actuellement sélectionné dans la base de données, qui est passé au constructeur des formulaires de résumé et d'édition afin que la même source de liaison soit utilisée par tous les formulaires. Outre les contrôles de liaison de données, un objet BindingSource peut retourner un objet DataRowView de la ligne actuelle. Vous pouvez utiliser DataRowView pour accéder aux données pour diverses raisons, telles que la détermination de la valeur actuelle d'une colonne. Notez qu'à des fins de démonstration, seules deux colonnes sont utilisées dans cet exemple pour les formulaires de résumé et d'édition.
Vous pouvez aussi faire en sorte que Visual Studio génère automatiquement des formulaires de résumé et d'édition en sélectionnant Générer les formulaires de données dans le menu contextuel de la balise active d'un contrôle DataGrid. Pour plus d'informations sur cette fonctionnalité, consultez Comment : générer des modes Résumé et Edition pour les applications de données (smart devices).
Les formulaires de cette application sont décrits dans le tableau suivant. Leurs options de menu sont également répertoriées.
Formulaire |
Fonctionnalités |
Options de menu |
---|---|---|
Formulaire principal (Form1) |
Affiche le contrôle DataGrid. |
New (Nouveau) Ajoute un nouvel enregistrement à la base de données et affiche le formulaire EditView. Edit (Modifier) Affiche le formulaire EditView. |
SummaryView |
Affiche les valeurs de colonne de l'enregistrement actif, optimisées pour l'affichage. |
(aucune) |
EditView |
Affiche les valeurs de colonne de l'enregistrement actif, optimisées pour l'édition. |
Done (Terminé) Accepte la boîte de dialogue, met à jour la base de données et affiche le formulaire principal. Cancel (Annuler) Annule la boîte de dialogue et affiche le formulaire principal. |
Pour créer le projet et concevoir le formulaire principal
Dans Visual Studio, créez un projet Smart Device et configurez la plateforme cible en tant que Kit de développement Windows Mobile 5.0 Pocket PC SDK ou Windows Mobile 6 Professional SDK.
Dans le menu Données, cliquez sur Ajouter une nouvelle source de données.
Dans l'Assistant Configuration de source de données, connectez-vous à la base de données Northwind à l'aide de Microsoft SQL Server Compact Edition (fournisseur de données .NET Framework pour SQL Server CE). La base de données Northwind (Northwind.sdf) est installée dans le dossier \Program Files\Microsoft SQL Server Compact Edition\v3.5\Samples.
Remarque : Sous Windows Vista, vous devez exécuter Visual Studio en tant qu'administrateur pour accéder à la base de données Northwind. Pour plus d'informations sur l'ajout d'une base de données, consultez Comment : ajouter une base de données à un projet Smart Device.
Dans la page Choisir vos objets de base de données de l'Assistant, sélectionnez la table Products et toutes ses colonnes.
Dans la Boîte à outils, ajoutez un contrôle DataGrid au formulaire. Définissez ses propriétés de taille et de présentation selon vos besoins.
Affectez à la propriété DataSource la valeur de la table Products. Visual Studio ajoute les objets NorthwindDataSet, ProductsBindingSource et ProductsTableAdapter à votre projet.
Définissez le style du contrôle DataGrid pour afficher une ou deux colonnes de la table en ajoutant un objet DataGridTableStyle à la collection TableStyles. Cliquez sur la propriété TableStyles dans le volet Propriétés. Cette action affiche la boîte de dialogue Éditeur de collections DataGridTableStyle. Effectuez ensuite les opérations suivantes :
Ajoutez un objet DataGridTableStyle à la collection TableStyles.
Spécifiez "Products" pour la propriété MappingName.
Cliquez sur la propriété GridColumnStyle. Cette action affiche la boîte de dialogue Éditeur de collections DataGridColumnStyle.
Ajoutez un objet DataGridTextBoxColumn à la collection GridColumnStyles.
Cliquez sur la propriété MappingName et sélectionnez Product Name (Nom du produit).
Définissez les valeurs Texte de l'en-tête et Largeur voulues.
Répétez cette procédure pour les colonnes supplémentaires.
Fermez les boîtes de dialogue.
Ajoutez deux formulaires au projet, un pour le mode Résumé et l'autre pour le mode Édition. Nommez-les SummaryView et EditView.
Ajoutez un paramètre aux constructeurs des formulaires SummaryView et EditView pour prendre un objet BindingSource. Dans ces formulaires, déclarez une variable globale, CurrentBindingSouce, devant avoir pour valeur l'objet BindingSource qui est passé au constructeur. Notez qu'elle doit être définie avant que la méthode InitializeComponent ne soit appelée.
Les développeurs Visual Basic doivent ajouter Sub New au formulaire, en ajoutant une méthode New dans la liste Nom de la méthode située en haut à droite dans le volet de code.
Dim CurrentBindingSource As BindingSource Public Sub New(ByVal bsource As BindingSource) CurrentBindingSource = bsource InitializeComponent() End Sub
private BindingSource CurrentBindingSource; public SummaryView(BindingSource bsource) { CurrentBindingSource = bsource; InitializeComponent(); }
Dans le formulaire principal, ajoutez un objet MenuItem nommé New(MenuItem1) et un autre nommé Edit (MenuItem2). Ajoutez le code suivant pour les événements Click de New et Edit.
' Add new record. Private Sub MenuItem1_Click(ByVal sender As System.Object,_ ByVal e As System.EventArgs) Handles MenuItem1.Click ProductsBindingSource.AllowNew = True ProductsBindingSource.AddNew() ' Pass the binding source to the form. Dim EditViewDialog As New EditView(ProductsBindingSource) If EditViewDialog.ShowDialog() <> DialogResult.OK Then ProductsBindingSource.CancelEdit() Else ProductsBindingSource.EndEdit() Me.ProductsTableAdapter.Update(Me.NorthwindDataSet) End If End Sub ' Edit record. Private Sub MenuItem2_Click(ByVal sender As System.Object,_ ByVal e As System.EventArgs) Handles MenuItem2.Click ' Pass the binding source to the form. Dim EditViewDialog As New EditView(ProductsBindingSource) If EditViewDialog.ShowDialog() <> DialogResult.OK Then ProductsBindingSource.CancelEdit() Else ProductsBindingSource.EndEdit() Me.ProductsTableAdapter.Update(Me.NorthwindDataSet) End If End Sub
// Add new record. private void menuItem1_Click(object sender, EventArgs e) { productsBindingSource.AllowNew = true; productsBindingSource.AddNew(); EditView EditViewDialog = new EditView(productsBindingSource); if (EditViewDialog.ShowDialog() != DialogResult.OK) { productsBindingSource.CancelEdit(); } else { ProductsBindingSource.EndEdit(); this.productsTableAdapter.Update(this.northwindDataSet); } } // Edit record (Edit). private void menuItem2_Click(object sender, EventArgs e) { EditView EditViewDialog = new EditView(productsBindingSource); if (EditViewDialog.ShowDialog() != DialogResult.OK) { productsBindingSource.CancelEdit(); } else { productsBindingSource.EndEdit(); this.productsTableAdapter.Update(this.northwindDataSet); } }
Dans le formulaire principal, ajoutez du code pour l'événement KeyDown du contrôle DataGrid qui se produit lorsqu'on appuie sur la touche d'action Pocket PC. Cette action affiche le formulaire SummaryView.
' Action button pressed. Private Sub DataGrid1_KeyDown(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.KeyEventArgs) _ Handles DataGrid1.KeyDown If (e.KeyCode = Keys.Enter) Then Dim SummaryViewDialog As New SummaryView(ProductsBindingSource) SummaryViewDialog.ShowDialog() End If End Sub
// Action button pressed. private void dataGrid1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { SummaryView SummaryViewDialog = new SummaryView(productsBindingSource); SummaryViewDialog.ShowDialog(); } }
Pour créer le mode Résumé
Ajoutez les contrôles suivants au formulaire SummaryView :
un contrôle Label pour l'en-tête Product Name, tel que "Product Name:" ;
un contrôle Label pour la valeur de Product Name ;
un contrôle Label pour la valeur de Discontinued, qui s'affiche uniquement lorsque la valeur de la colonne Discontinued de la table Products est true ; intitulez cette étiquette "DISCONTINUED" avec une police rouge.
Ajoutez le code suivant au constructeur pour le formulaire SummaryView pour définir les liaisons de données. Déclarez une variable de formulaire nommée CurrentBindingSource devant avoir pour valeur l'instance BindingSource passée au constructeur du formulaire. Un objet DataRowView détermine que si la colonne Discontinued a la valeur true, l'étiquette Discontinued s'affiche.
'Dim CurrentBindingSource As BindingSource Public Sub New(ByVal bsource As BindingSource) CurrentBindingSource = bsource ' This call is required by the Windows Forms Designer. InitializeComponent() ' Add any initialization after the InitializeComponent() call. ' Bind the label that shows the product name. ProductNameLabelVal.DataBindings.Add("Text", _ CurrentBindingSource, "Product Name") ' Show the Discontinued label if ' that value is true in the database. Dim drView As DataRowView drView = CurrentBindingSource.Current If drView.Item("Discontinued") = True Then DiscontinuedLabel.Visible = True Else DiscontinuedLabel.Visible = False End If End Sub
private BindingSource CurrentBindingSource; public SummaryView(BindingSource bsource) { CurrentBindingSource = bsource; InitializeComponent(); // Bind the label that shows the product name. ProductNameLabelVal.DataBindings.Add("Text", CurrentBindingSource, "Product Name"); // Show the Discontinued label if // that value is true in the database. DataRowView drView; drView = (DataRowView) CurrentBindingSource.Current; if (drView["Discontinued"] == true) { DiscontinuedLabel.Visible = true; } else { DiscontinuedLabel.Visible = false; } }
Pour créer le mode Édition
Ajoutez une référence à l'espace de noms Microsoft.WindowsCE.Forms de votre projet.
Faites glisser un composant InputPanel de la Boîte à outils vers le formulaire EditView. Une seule instance est nécessaire pour fournir à l'utilisateur le clavier virtuel (SIP) pour entrer du texte dans une zone de texte.
Ajoutez les contrôles suivants au formulaire :
un contrôle Label pour la zone de texte Product Name ;
un contrôle TextBox pour la colonne Product Name ;
un contrôle CheckBox pour la colonne Discontinued ; affectez à sa propriété ThreeState la valeur true.
Pour définir les liaisons de données, ajoutez le code suivant au constructeur du formulaire après l'appel de InitializeComponent. Ce code permet l'ajout d'un nouvel enregistrement ou la modification d'un enregistrement existant. Si un nouvel enregistrement est ajouté, un objet DataRowView détermine si cette colonne Discontinued a une valeur null et définit pour la propriété NullValue de la liaison la valeur Indeterminate de la propriété CheckState.
Public Sub New(ByVal bsource As BindingSource) CurrentBindingSource = bsource InitializeComponent() ' Add the bindings. ProductNameTextBox.DataBindings.Add("Text",_ CurrentBindingSource, "Product Name") Dim drView As DataRowView drView = CurrentBindingSource.Current If IsDBNull(drView("Discontinued")) Then DiscontinuedCheckBox.DataBindings.Add("CheckState",_ CurrentBindingSource, "Discontinued", True,_ DataSourceUpdateMode.OnValidation, _ CheckState.Indeterminate) Else DiscontinuedCheckBox.DataBindings.Add("Checked",_ CurrentBindingSource, "Discontinued") End If End Sub
public EditView(BindingSource bsource) { CurrentBindingSource = bsource; InitializeComponent(); CurrentBindingSource = bsource; InitializeComponent(); // Add the bindings. productNameTextBox.DataBindings.Add("Text", CurrentBindingSource, "Product Name"); DataRowView drView; drView = (DataRowView) CurrentBindingSource.Current; if (drView("Discontinued") == null) { DiscontinuedCheckBox.DataBindings.Add("CheckState", CurrentBindingSource, "Discontinued", true, DataSourceUpdateMode.OnValidation, CheckState.Indeterminate); } else { DiscontinuedCheckBox.DataBindings.Add("Checked", CurrentBindingSource, "Discontinued"); } }
Ajoutez un objet MenuItem intitulé Done pour mettre à jour la base de données avec les modifications et retourner au formulaire principal.
' Done Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click Me.DialogResult = DialogResult.OK Me.Close() End Sub // Done private void menuItem1_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.OK; this.Close(); }
Ajoutez un objet MenuItem intitulé Cancel, au même niveau que Done, pour ignorer les modifications et retourner au formulaire principal.
' Cancel Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click Me.DialogResult = DialogResult.Cancel Me.Close() End Sub
// Cancel private void menuItem1_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; this.Close(); }
Compilation du code
Cet exemple nécessite des références aux espaces de noms suivants :
Voir aussi
Tâches
Comment : utiliser le contrôle DataGrid sur Smartphone
Concepts
Génération d'objets DataSet fortement typés (ADO.NET)
Autres ressources
Accès aux données et prise en charge du langage XML dans le .NET Compact Framework