Share via


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

  1. 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.

  2. Dans le menu Données, cliquez sur Ajouter une nouvelle source de données.

  3. 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.

  4. Dans la page Choisir vos objets de base de données de l'Assistant, sélectionnez la table Products et toutes ses colonnes.

  5. 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.

  6. Affectez à la propriété DataSource la valeur de la table Products. Visual Studio ajoute les objets NorthwindDataSet, ProductsBindingSource et ProductsTableAdapter à votre projet.

  7. 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 :

    1. Ajoutez un objet DataGridTableStyle à la collection TableStyles.

    2. Spécifiez "Products" pour la propriété MappingName.

    3. Cliquez sur la propriété GridColumnStyle. Cette action affiche la boîte de dialogue Éditeur de collections DataGridColumnStyle.

    4. Ajoutez un objet DataGridTextBoxColumn à la collection GridColumnStyles.

    5. Cliquez sur la propriété MappingName et sélectionnez Product Name (Nom du produit).

    6. Définissez les valeurs Texte de l'en-tête et Largeur voulues.

    7. Répétez cette procédure pour les colonnes supplémentaires.

    8. Fermez les boîtes de dialogue.

  8. Ajoutez deux formulaires au projet, un pour le mode Résumé et l'autre pour le mode Édition. Nommez-les SummaryView et EditView.

  9. 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();
    }
    
  10. 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);
        }
    }
    
  11. 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é

  1. 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.

  2. 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

  1. Ajoutez une référence à l'espace de noms Microsoft.WindowsCE.Forms de votre projet.

  2. 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.

  3. 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.

  4. 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");
         }
    }
    
  5. 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();
    }
    
  6. 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