Comment : utiliser le contrôle DataGrid sur Smartphone
Mise à jour : novembre 2007
Vous pouvez créer une application Smartphone semblable au programme Contacts Smartphone.
Remarque : |
---|
Si vous utilisez une version du .NET Compact Framework antérieure à la version 3.5, vous devez ajouter une référence à System.Windows.Forms.DataGrid.dll dans le projet pour pouvoir l'utiliser. |
Cet exemple montre le formulaire principal avec une liste de noms de produits dans un contrôle DataGrid de la base de données Northwind qui est installée avec Visual Studio. Il contient également un formulaire de mode Résumé (SummaryView) pour afficher l'enregistrement actif, ainsi qu'un formulaire de mode Édition (EditView) pour modifier les données et ajouter de nouveaux enregistrements. Un objet BindingSource fournit l'accès à l'enregistrement actuellement sélectionné dans la base de données. 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.
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. 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.
Les formulaires de cette application sont décrits dans le tableau suivant. Les options de menu pour les touches programmables gauche et droite Smartphone sont également répertoriées.
Formulaire |
Fonctionnalités |
Touche programmable gauche |
Touche programmable droite |
---|---|---|---|
Formulaire principal (Form1) |
Affiche une colonne du tableau dans le contrôle DataGrid sous la forme d'une liste de contacts Smartphone. Lorsque vous appuyez sur la touche Action ou sur Entrée sur votre clavier avec l'émulateur, le formulaire SummaryView s'affiche. |
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. |
Done (Terminé) Retourne au formulaire principal. |
(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 pour Smartphone ou Windows Mobile 6 Standard.
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.
Pour que le contrôle DataGrid se présente comme la liste Contacts Smartphone, définissez ses propriétés comme indiqué dans le tableau ci-dessous.
Propriété DataGrid
Définir la valeur
False
False
Structure Point avec -2 pour x, et -2 pour y.
Structure Size avec 184 pour la largeur et 190 pour la hauteur.
Affectez à la propriété DataSource la valeur de la table Orders. Visual Studio ajoute les objets NorthwindDataSet, ProductsBindingSource et ProductsTableAdapter à votre projet.
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). Ces menus correspondent aux touches programmables gauche et droite Smartphone. 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.AddNew() Dim EditViewDialog As New EditView(ProductsBindingSource) If EditViewDialog.ShowDialog() <> DialogResult.OK Then ProductsBindingSource.CancelEdit() Else ProductsBindingSource.EndEdit() 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 MenuItem1.Click Dim EditViewDialog As New EditView(ProductsBindingSource) If EditViewDialog.ShowDialog() <> DialogResult.OK Then ProductsBindingSource.CancelEdit() Else ProductsBindingSource.EndEdit() 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 qui se produit lorsqu'on appuie sur la touche d'action Smartphone. Cette action affiche le formulaire SummaryView.
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 SummaryView = New SummaryView(ProductsBindingSource) Cursor.Current = Cursors.Default SummaryView.ShowDialog() End If End Sub
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 :
un contrôle Label pour l'en-tête de 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.
Public Sub New(ByVal bsource As BindingSource) CurrentBindingSource = bsource ' This call is required by the Windows Forms Designer. 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. 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; } }
Ajoutez un objet MenuItem intitulé Done pour que la touche programmable gauche ferme le formulaire et retourne au formulaire principal.
Private Sub MenuItem1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MenuItem1.Click Me.Close End Sub
private void MenuItem1_Click(object sender, System.EventArgs e) { this.Close(); }
Pour créer le mode Édition
Ajoutez une référence à l'espace de noms Microsoft.WindowsCE.Forms de votre projet. Ceci est nécessaire pour définir le paramètre InputMode Smartphone sur les contrôles de zone de texte.
Ajoutez les contrôles suivants au formulaire :
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 la colonne Discontinued a une valeur null. Si la valeur est null, la case à cocher a la valeur false.
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. ' Set the Smartphone input mode. InputModeEditor.SetInputMode(ProductNameTextBox,_ InputMode.AlphaT9) ProductNameTextBox.DataBindings.Add("Text",_ CurrentBindingSource, "Product Name") ' Determine the Discontinued value. ' If null, change to False. Dim drView As DataRowView drView = CurrentBindingSource.Current ' Set the bindings. If IsDBNull(drView("Discontinued")) Then DiscontinuedCheckBox.DataBindings.Add("CheckState",_ CurrentBindingSource, "Discontinued", True,_ DataSourceUpdateMode.OnValidation, False, "") Else DiscontinuedCheckBox.DataBindings.Add("Checked",_ CurrentBindingSource, "Discontinued") End If End Sub
public EditView(BindingSource bsource) { CurrentBindingSource = bsource; InitializeComponent(); // Set the Smartphone input mode. InputModeEditor.SetInputMode(ProductNameTextBox, InputMode.AlphaT9); // Set the bindings. ProductNameTextBox.DataBindings.Add("Text", CurrentBindingSource,"Product Name"); // Determine the Discontinued value. // If null, change to False. DataRowView drView; drView = (DataRowView) CurrentBindingSource.Current; if(drView("Discontinued")== null) { DiscontinuedCheckBox.DataBindings.Add("CheckState", CurrentBindingSource, "Discontinued", true,DataSourceUpdateMode.OnValidation,false,""); } else { DiscontinuedCheckBox.DataBindings.Add("Checked", CurrentBindingSource, "Discontinued"); } }
Ajoutez un objet MenuItem intitulé Done pour que la touche programmable gauche mette à jour la base de données avec les modifications et retourne au formulaire principal.
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
Private void MenuItem1_Click(object sender, System.EventArgs e) { this.DialogResult = DialogResult.OK; this.Close(); }
Ajoutez un objet MenuItem intitulé Cancel pour que la touche programmable droite ignore les modifications et retourne au formulaire principal.
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
Private void MenuItem2_Click(object sender, System.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 Pocket PC
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