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 :

Un tableau avec un peu de souplesse


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Par défaut Un tableau avec un peu de souplesse
    Bonjour,

    Je cherche un objet SOUPLE pour pouvoir ajouter des lignes et des colonnes comme bon me semble... un tableau dynamique en somme.

    Voici une liste d'objet que j'ai essayé sans succès :
    - dataTable
    - Array
    - ArrayList
    - DataGrid

    En fait j'ai une DataTable qui a cette tête :

    A1 - B1
    A1 - B2
    A1 - B3
    A2 - B1
    A2 - B2
    A2 - B3
    A3 - B1
    A3 - B2
    A3 - B3

    Et je veux le transformer ainsi

    A1 - B1 - B2 - B3
    A2 - B1 - B2 - B3
    A3 - B1 - B2 - B3

    C'est pourtant pas très compliqué, l'algo est tout tracé... mais impossible de trouver un simple tableau dans le quel je puisse faire AddRow ou AddColumn à ma guise!

    Si quelqu'un connaît l'objet qui va bien je suis preneur

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 182
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 182
    Par défaut
    Bonjour.

    Je ne vois pas ce que tu repproches à la Datatable où tu peux ajouter dynamiquement des lignes ou des colonnes, et faire des select en prime.
    Plus souple, ça me semble difficile.

    Qu'est ce qui te géne dans la Datatable ?

    Cdt.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    J'ai déjà implémenté un truc comme ça en C# (pas très optimisé ni très propre, mais bon, ça marche...) :

    Code C# : 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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
        public class DynamicTable<T>
        {
            List<List<T>> array;
     
            public DynamicTable()
            {
                array = new List<List<T>>();
            }
     
            public int Rows
            {
                get
                {
                    return array.Count;
                }
                set
                {
                    while (array.Count > value)
                    {
                        array.RemoveAt(value);
                    }
                    while (array.Count < value)
                    {
                        array.Add(new List<T>());
                    }
                }
            }
     
            private int columns = 0;
            public int Columns
            {
                get
                {
                    return columns;
                }
                set
                {
                    columns = value;
                }
            }
     
            public T this[int i, int j]
            {
                get
                {
                    if (i < Rows && j < Columns)
                    {
                        List<T> row = array[i];
                        if (j < row.Count)
                            return row[j];
                        else
                            return default(T);
                    }
                    else
                        throw new IndexOutOfRangeException();
                }
                set
                {
                    if (i < Rows && j < Columns)
                    {
                        List<T> row = array[i];
                        while (j >= row.Count)
                            row.Add(default(T));
                        row[j] = value;
                    }
                    else
                        throw new IndexOutOfRangeException();
                }
            }
     
            public override string ToString()
            {
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < Rows; i++)
                {
                    if (i > 0)
                        sb.AppendLine();
                    for (int j = 0; j < Columns; j++)
                    {
                        if (j > 0)
                            sb.Append("\t");
                        sb.Append(this[i, j]);
                    }
                }
     
                return sb.ToString();
            }
        }

    Utilisation:

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
                DynamicTable<string> dt = new DynamicTable<string>();
                dt.Rows = 3;
                dt.Columns = 2;
                dt[0, 0] = "hello";
                dt[0, 1] = "world !";
                dt[1, 0] = "this is";
                dt[1, 1] = "a dynamic";
                dt[2, 1] = "table";
                Console.WriteLine(dt);

    Mais je sais pas si ça va mieux te convenir que le DataTable...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Je repasse juste récupérer mon code, ça va plus vite que de le chercher dans le bordel de mes projets

    Au fait, The eye, ça répond à ta question ? Mon code ne fait pas le traitement demandé, mais ça correspond à l'objet que tu cherchais...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Par défaut
    Merci pour ta réponse.

    Entre temps j'ai u contourner le problème. La difficulté était de connaître à l'avance lenombre de colonnes...

    Je voulais faire le tout en ne faisant qu'un appel à la BDD, mais du coup j'en fait deux.

    C'est pas aussi bien que je voulais mais ça marche, avec des perfs corrects alors je m'en suis contenté

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    C'est sûr que si les perfs sont importantes, ma DynamicTable n'est pas très adaptée

Discussions similaires

  1. alterner les couleurs dans un tableau avec xsl
    Par Eithelgul dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 03/05/2015, 23h29
  2. tableau avec 1 colonne sur 3 sans cadre
    Par brasco06 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 21/04/2005, 17h44
  3. balise <img> dans un tableau avec firefox
    Par yannock dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 25/10/2004, 16h44
  4. pb de coord de tex dans tableau avec multitex
    Par sebh dans le forum OpenGL
    Réponses: 3
    Dernier message: 25/01/2004, 21h36
  5. Réponses: 13
    Dernier message: 14/10/2003, 14h31

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