IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

ScrollEvent pour recharger une DataTable liee a ma DataGridView


Sujet :

Windows Forms

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut ScrollEvent pour recharger une DataTable liee a ma DataGridView
    Bonjour, voici mon problème:
    Dans mon form, j'ai une DataGridview qui est liée à une DataTable en local par BindingSource. Cette table se remplit en allant lire un bloc de données dans un fichier binaire.
    Ce que je veux faire, c'est recharger ma DataTable en allant lire dans le fichier source lorsque je scrolle sur ma DataGridView.
    Plus précisément, afin de laisser la liberté de scroller vers le haut, je veux charger dans la DataTable les lignes de n à m et afficher dans la DataGridView les lignes de n+10 à n+10+size_window en utilisant (du moins, c'est mon idée) la propriété FirstDisplayedScrollingIndex = n+10

    Voici ma tentative:

    first_displayed est l'index absolu(pour l'ensemble des données) de la première ligne dans la GridView avant l'évenement.
    blockIndex et le `n`dont je parlais, la première ligne du bloc source à charger dans la Table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    private void maGridView_Scroll(object sender, ScrollEventArgs e)
                {
                    if (e.ScrollOrientation == ScrollOrientation.VerticalScroll)
                    {
     
                            int y = maGridView.FirstDisplayedScrollingRowIndex;
     
                             if (first_displayed <= 10)  // condition aux limites
                            {
                                first_displayed = y;
                                if (y <= 10)
                                {
                                    blockIndex = 0;
                                }
                                else
                                {
                                    blockIndex = (uint) (first_displayed-10);
                                }
     
                            }                        else
                            {
                                first_displayed += (y - 10);
                                if (first_displayed <= 10)
                                {
                                    blockIndex = 0;
                                }
                                else
                                {
                                    blockIndex = (uint)(first_displayed - 10);
                                }
                            }
     
                            LoadTable(file, (blockIndex));
                            maGridView.Refresh();
     
                            if (first_displayed > 10)
                            {
                                maGridView.FirstDisplayedScrollingRowIndex = 10;
                            }
                            else
                            {
                                maGridView.FirstDisplayedScrollingRowIndex = first_displayed;
                            }
     
     
     
                    }
    Résultat, ma Table se recharge bien mais elle n'est pas lue dans le GridView. J'ai une exception System.ArgumentOutOfRangeException qui semble indiquer un problème d'index. Est-ce que j'utilise FirstDisplayedScrollingRowIndex de la mauvaise manière?

    Après avoir rechargé ma DataTable la propriété FirstDisplayedScrollingRowIndex se voit assigner une valeur de -1 le Refresh() ne fonctionne pas. Si j'essaie de placer mon Refresh() après l'assignation de FirstDisplayedScrollingRowIndex, c'est cette assignation qui me renvoie l'exception.

    Lorsque je reloade ma DataTable, je la nettoie et la reremplie, le binding support-t-il une telle opération? ou dois-je recréer le lien entre la DataGridView et la DataTable. Auquel cas, le BindingSource perd grandement de son intérêt.

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

Discussions similaires

  1. Réponses: 7
    Dernier message: 25/01/2012, 15h25
  2. bouton supprimer pour une dataTable
    Par belmehdi17 dans le forum JSF
    Réponses: 1
    Dernier message: 18/03/2009, 12h33
  3. une fonction pour le bgcolor dans une datatable
    Par ghnawfal dans le forum JSF
    Réponses: 2
    Dernier message: 09/04/2008, 14h33
  4. Problème pour lire une datatable
    Par kikitx dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/08/2007, 21h19
  5. [VB.NET] Pb pour la copie d'une datatable...
    Par bisounux dans le forum Windows Forms
    Réponses: 12
    Dernier message: 12/01/2006, 11h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo