Partager via


Dépannage des problèmes liés au contrôle DataRepeater (Visual Studio)

Mise à jour : Juillet 2008

Cette rubrique répertorie les problèmes courants susceptibles de se produire lorsque vous utilisez le contrôle DataRepeater.

Les événements de clavier et de souris DataRepeater ne sont pas déclenchés

Certains événements de contrôle DataRepeater, tels que événements de clavier et de souris, ne sont pas déclenchés. Ce problème est dû au design. Le contrôle DataRepeater est un conteneur pour des objets DataRepeaterItem et est inaccessible au moment de l'exécution. Le DataRepeaterItem n'expose d'événements au moment du design. Par conséquent, le fait de cliquer sur un élément ou d'appuyer sur une touche lorsque l'élément a le focus ne déclenche pas d'événement.

Il y a toutefois une exception à cette règle, à savoir lorsque la valeur affectée à la propriété Padding est suffisamment grande pour exposer les bords du contrôle DataRepeater. Dans ce cas, des événements de souris sont déclenchés lorsque vous cliquez dans la marge exposée.

Pour résoudre ce problème, ajoutez un contrôle Panel à la section ItemTemplate du contrôle DataRepeater, puis ajoutez le reste des contrôles au Panel. Vous pouvez ensuite ajouter le code aux gestionnaires d'événements du contrôle Panel pour les événements de clavier et de souris.

Le DataRepeater est partiellement masqué derrière le navigateur de liaisons

Lorsque vous ajoutez pour la première fois un contrôle DataRepeater à un formulaire, puis ajoutez des contrôles liés aux données depuis la fenêtre Sources de données, le contrôle BindingNavigator peut apparaître au-dessus du contrôle DataRepeater. Il s'agit d'une limitation connue de la fenêtre Sources de données, qui est cohérente avec le comportement d'autres contrôles, tels que DataGridView.

Vous pouvez déplacer le DataRepeater en dessous du contrôle BindingNavigator au moment du design ou ajouter un code semblable à celui présenté ci-après dans le gestionnaire d'événements Load.

DataRepeater1.Top = ProductsBindingNavigator.Height
dataRepeater1.Top = productsBindingNavigator.Height;

Les contrôles ne s'affichent pas correctement au moment de l'exécution

Certains contrôles d'un contrôle DataRepeater peuvent ne pas s'afficher comme prévu au moment de l'exécution. Le processus utilisé pour cloner des contrôles depuis le ItemTemplate vers le DataRepeaterItem ne parvient pas toujours à déterminer toutes les propriétés de tous les contrôles. Par exemple, si vous ajoutez un contrôle ListBox indépendant à un contrôle DataRepeater au moment du design et remplissez sa collection Items avec une liste de chaînes, le ListBox sera vide au moment de l'exécution. Cela s'explique par le fait que le processus de clonage n'est pas en mesure de prendre en compte la propriété Items.

Vous pouvez résoudre les problèmes de ce type en restaurant les propriétés manquantes dans l'événement ItemCloned, qui se produit après que le clonage par défaut a été effectué. L'exemple suivant montre comment réparer la collection Items d'un contrôle ListBox dans le gestionnaire d'événements ItemCloned.

Private Sub DataRepeater1_ItemCloned(ByVal sender As Object, ByVal e _
 As Microsoft.VisualBasic.PowerPacks.DataRepeaterItemEventArgs) _
 Handles DataRepeater1.ItemCloned
    Dim Source As ListBox = _
     CType(DataRepeater1.ItemTemplate.Controls.Item("ListBox1"), ListBox)
    Dim ListBox1 As ListBox = _
     CType(e.DataRepeaterItem.Controls.Item("ListBox1"), ListBox)
    For Each s As String In Source.Items
        ListBox1.Items.Add(s)
    Next
End Sub
private void dataRepeater1_ItemCloned(object sender, 
    Microsoft.VisualBasic.PowerPacks.DataRepeaterItemEventArgs e)
{
    ListBox Source = (ListBox)dataRepeater1.ItemTemplate.Controls["listBox1"];
    ListBox listBox1 = (ListBox)e.DataRepeaterItem.Controls["listBox1"];
    foreach (string s in Source.Items)
    {
        listBox1.Items.Add(s);
    }
}

Le symbole de sélection n'apparaît pas sur l'en-tête d'élément

Lorsque vous modifiez la propriété SelectionColor de l'en-tête d'élément dans un contrôle DataRepeater, certains choix de couleurs peuvent provoquer la disparition du symbole de sélection. La modification de la propriété ItemHeaderSize peut également entraîner la disparition de ce symbole.

La couleur et taille du symbole de sélection ne peuvent pas être modifiées.

  • Si vous affectez à SelectionColor la valeur White, le symbole de sélection n'apparaît pas lorsqu'un élément est sélectionné pour la première fois.

  • Si vous affectez au SelectionColor la valeur Black, le symbole de sélection n'apparaît pas lorsqu'un contrôle est sélectionné. Par ailleurs, le symbole de crayon n'est pas visible lorsqu'un contrôle est en mode édition.

  • Si la propriété ItemHeaderSize a une valeur inférieure à 11, les symboles d'indicateur n'apparaissent pas dans l'en-tête d'élément.

Vous pouvez fournir votre propre en-tête d'élément et symbole de sélection en utilisant un contrôle PictureBox et en surveillant la propriété IsCurrent du DataRepeaterItem dans l'événement DrawItem du contrôle DataRepeater. Pour plus d'informations, consultez IsCurrent.

Voir aussi

Tâches

Comment : afficher des données liées dans un contrôle DataRepeater (Visual Studio)

Comment : afficher des données indépendantes dans un contrôle DataRepeater (Visual Studio)

Comment : modifier la disposition d'un contrôle DataRepeater (Visual Studio)

Comment : modifier l'apparence d'un contrôle DataRepeater (Visual Studio)

Comment : afficher des en-têtes d'élément dans un contrôle DataRepeater (Visual Studio)

Comment : désactiver l'ajout et la suppression d'éléments dans un contrôle DataRepeater (Visual Studio)

Comment : rechercher des données dans un contrôle DataRepeater (Visual Studio)

Comment : créer un formulaire maître/détail en utilisant deux contrôles DataRepeater (Visual Studio)

Concepts

Introduction au contrôle DataRepeater (Visual Studio)

Historique des modifications

Date

Historique

Raison

Juillet 2008

Rubrique ajoutée.

Modifications de fonctionnalités dans le SP1.