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

VB.NET Discussion :

Redimensionnement d'un tableau


Sujet :

VB.NET

  1. #1
    Membre éclairé Avatar de GeoTrouvePas
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Juin 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 185
    Par défaut Redimensionnement d'un tableau
    Bonjour et bonnes fêtes à tout le monde,

    Pour apprendre Vb.Net, je me sers énormément du tuto de Philippe Lasserre.

    En voyant ce code à la page 202 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim T(20,20) As StringRedim Preserve T(30,30)
    Je me suis dit qu'on pouvait enfin redimensionner n'importe quelle dimension d'un tableau (contrairement à Vba).
    Mais à l'essai, ce code me renvoi malheureusement une erreur me disant qu'on ne peut modifier que la dernière dimension.

    Je suis tout de même surpris que ce tuto très bien fait puisse reprendre une telle erreur.

    Alors est ce que j'ai mal compris qqchose ? Aurais je raté une information ? Y a - t - il besoin d'un import spécifique ?

    Je vous remercie par avance de vos éclaircissements

  2. #2
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonsoir,

    Ne pas donner de dimension au niveau du Dim mais plutôt faire un premier ReDim quand nécessaire (sans Preserve), puis faire des ReDim Preserve chaque fois que besoin.
    Attention, seule la dimension à droite peut varier de la sorte.
    S'il faut vraiment du dimensionnement dynamique sur les 2 dimensions, alors il faut gérer un tableau dynamique à 1 dimension de tableaux dynamiques à 1 dimension (je parle bien d'un tableau de tableaux). Je dois avoir un algo quelque part, si tu as besoin, je le chercherai.


  3. #3
    Membre éclairé Avatar de GeoTrouvePas
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Juin 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 185
    Par défaut
    Bonjour Phil Rob et merci pour ta réponse,

    Ma question n'était pas vraiment axée sur les "bonnes pratiques" ou une solution de contournement.
    Je voulais juste avoir une confirmation car j'ai beaucoup de mal à croire qu'une telle erreur puisse être passée inaperçue dans ce tuto.

    Tant que tu es là, j'en profite pour élargir ma question :

    Mon application va servir à consulter / modifier une petite dizaines de tables assez basiques (que des données de type String, Date, Integer...). Je connais par avance le nombre de colonnes mais pas le nombre d'enregistrements.
    La plupart des opérations vont consister à charger les données dans une variable, les afficher dans un contrôle, ajouter ou modifier une ligne, enregistrer les données modifiées dans un fichier externe.

    Quel serait le meilleur type de variable / tableaux / collection / Liste à utiliser pour manipuler ces données ?

  4. #4
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Pourquoi pas le DataTable?
    Tu peux nommer les colonnes, les types peuvent être différents d'une colonne à l'autre, il est très facile de montrer le contenu dans un DataGridView, on peut y faire des recherches comme dans une base de données ....
    Dim DT As New DataTable ' en variable globale

    Puis créer les colonnes, puis ajouter les lignes au fur et à mesure.

    J'espère que ceci te donnera des idées...

  5. #5
    Membre éclairé Avatar de GeoTrouvePas
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Juin 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 185
    Par défaut
    Encore merci Phil !

    J'étais parti sur des DataTable au départ, avec connexion direct sur une base de données. Mais comme j'ai un soucis avec la connexion (voir précédent post), j'ai changé mon fusil d'épaule. Et les DataGridView semblent effectivement pratiques mais je préfère la présentation plus soignées des listview.

    Actuellement j'essaye de fonctionner avec des classes et des listes de classe. Une occasion pour moi de me former à la POO.

    Est ce également une solution viable ? Je n'ai aucune idée de ce que ça donne en terme de performances et surtout si c'est une utilisation "naturelle / adaptée / logique" du code.

  6. #6
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,

    Le DataTable n'est pas réservé au travail avec les DB et, en matière de tableaux dynamiques, tu constateras que son usage est le plus simple.
    Quant à faire un tableau de classes, pourquoi pas. Mais dans ce cas, il s'agira d'un tableau dynamique à 1 dimension, chaque position recevant un objet de la classe.
    Ta question initiale concernait un tableau dynamique à 2 dimensions. Mais comme il s'avère que le nombre de colonnes est connu, son usage devient plus simple.
    Pour ce qui est d'utiliser un ListView plutôt qu'un DataGridView, c'est selon ...

    Voici les codes de trois exemples correspondants aux 3 solutions évoquées ci-dessus, en supposant que 3 colonnes soient suffisantes.


    Pour le tableau de classes, j'ai créé la classe MesDonnees (juste pour l'exemple qui nous concerne, à part le mot Classe, il n'y a pas de DAO là-dedans) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Class MesDonnees
     
        Public Nom As String
        Public Quantite As Integer
        Public Duree As Integer
     
    End Class
    Le tableau TableDynamiqueDeMesDonnees est déclaré au niveau global du Form et son usage se trouve dans la procédure AjoutEnTableDynamiqueDeMesDonnees :
    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
    Public Class FProba ' c'est le nom de mon Form :)
        Dim TableDynamiqueDeMesDonnees() As MesDonnees  ' les 3 colonnes sont les 3 champs de la classe
    '... ... ...
        Private Sub AjoutEnTableDynamiqueDeMesDonnees()
            Static NombreElementsEnTableDynamiqueDeMesDonnees As Integer = 0
     
            If NombreElementsEnTableDynamiqueDeMesDonnees = 0 Then
                ReDim TableDynamiqueDeMesDonnees(NombreElementsEnTableDynamiqueDeMesDonnees) 
            Else
                ReDim Preserve TableDynamiqueDeMesDonnees(NombreElementsEnTableDynamiqueDeMesDonnees)
            End If
     
            'Ajout des donnees
            Dim UnObjetDeMesDonnees As New MesDonnees
            UnObjetDeMesDonnees.Nom = "Libelle de cet objet"
            UnObjetDeMesDonnees.Quantite = 10 ' quantité de cet objet
            UnObjetDeMesDonnees.Duree = 5 ' duree de cet objet
     
            TableDynamiqueDeMesDonnees(0) = UnObjetDeMesDonnees
     
            'Mise à jour du nombre d'éléments contenus
            NombreElementsEnTableDynamiqueDeMesDonnees += 1
        End Sub

    Pour le tableau à 2 dimensions, j'utilise le tableau TableDynamique qui est déclaré au niveau global du Form et son usage se trouve dans la procédure AjoutEnTableDynamique :
    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
    Public Class FProba ' c'est le nom de mon Form :)
        Dim TableDynamique(,) As String   ' pour 3 colonnes, nous utiliserons les indices 0 à 2
    '... ... ...
        Private Sub AjoutEnTableDynamique()
            Static NombreElementsEnTableDynamique As Integer = 0
     
            If NombreElementsEnTableDynamique = 0 Then
                ReDim TableDynamique(2, NombreElementsEnTableDynamique) ' 2 pour 3 colonnes aux indices 0, 1 et 2.
            Else
                ReDim Preserve TableDynamique(2, NombreElementsEnTableDynamique)
            End If
     
            'Ajout des donnees
            TableDynamique(0, 0) = "Donnees pour colonne 0"
            TableDynamique(1, 0) = "Donnees pour colonne 1"
            TableDynamique(2, 0) = "Donnees pour colonne 2"
     
            'Mise à jour du nombre d'éléments contenus
            NombreElementsEnTableDynamique += 1
        End Sub
    Enfin, pour l'usage du DataTable, il est déclaré déclaré au niveau global du Form, ses colonnes sont crées dans la procédure Load du Form, et son usage se trouve dans la procédure AjoutEnDataTable :

    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
    Public Class FProba ' c'est le nom de mon Form :)
        Dim MonDataTable As New DataTable   ' pour 3 colonnes, nous créerons les 3 colonnes
     
    '... ... ...
        Private Sub FProba_Load(sender As Object, e As EventArgs) Handles Me.Load
     
            ' Creation des colonnes du DataTable
            MonDataTable.Columns.Add("Nom")
            MonDataTable.Columns.Add("Quantite")
            MonDataTable.Columns.Add("Duree")
     
        End Sub
     
    '... ... ...
        Private Sub AjoutEnDataTable()
            'Ajout des donnees
            MonDataTable.Rows.Add("Libelle de cet objet", "10", "5") ' 
        End Sub

    Je joins le projet de test des codes ci-dessus, a exécuter en pas à pas (F11) : DataTableMulti.zip

    ...


    Un petit complément ...

    En ajoutant un bouton BAfficheDataTable et un DatadGridView1 sur le Form, la procédure suivante affiche le contenu du DataTable comme illustré ci-dessous (pas possible de faire si si simple avec le ListView) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Private Sub BAfficheDataTable_Click(sender As Object, e As EventArgs) Handles BAfficheDataTable.Click
            DataGridView1.DataSource = MonDataTable
        End Sub
    Nom : datatable.jpg
Affichages : 383
Taille : 21,9 Ko

Discussions similaires

  1. redimensionner dynamiquement un tableau
    Par sebac dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/03/2010, 17h01
  2. [MySQL] Redimensionnement d'un tableau
    Par Palsajicoco dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 10/07/2009, 10h49
  3. Bloquer le redimensionnement d'un tableau
    Par Danger dans le forum Word
    Réponses: 4
    Dernier message: 26/09/2008, 21h20
  4. redimensionnement d'un tableau
    Par mobidyc dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 21/03/2008, 16h03
  5. Redimensionnement d'un tableau
    Par edophie dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 29/03/2007, 15h53

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