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

C# Discussion :

Faire pivoter une grille


Sujet :

C#

  1. #1
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut Faire pivoter une grille
    Salut tout le monde,

    Je me suis fais une p'tit appli WPF qui utilise le composant de DevExpress PivotTable.

    C'est super il fait exactement ce que je veux ... meme si je ne m'en sert qu'en affichage simple ... pas de groupage ... rien .... que de la "simple rotation" de grille ...

    C'est bien jolie mais tout ça, mais c'est assez lent, et ça me rajoute 10 Mo de DLL ...

    Alors je voudrais savoir s'il il existe une fonction qui permet de calculer directement la rotation pour l'afficher dans une simple DataGrid ou GridView ...

    Si vous avez une piste parcequ aprés une heure à chercher sur Google, y a de tout et de rien avec du linq sans linq du marche et qui marche pas

    Merci d'avance pour votre aide.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Points : 552
    Points
    552
    Par défaut
    salut,
    donc si j'ai bien compris: les lignes deviennent des colonnes, et les colonnes deviennent des lignes !

    Ba c'est plutot simple comme algo non ?
    avec un pti binding sur une datatable par exemple ca devrait etre simple...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Points : 552
    Points
    552
    Par défaut
    cado,
    ca répond à ton besoin:

    init de mon datagrid avec des valeurs
    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
            public Form1()
            {
                InitializeComponent();
     
                DataTable dt = new DataTable();
                dt.Columns.Add("Col1");
                dt.Columns.Add("Col2");
                dt.Columns.Add("Col3");
     
                DataRow dr = dt.NewRow();
                dr["Col1"] = "1";
                dr["Col2"] = "2";
                dr["Col3"] = "3";
                dt.Rows.Add(dr);
     
                dr = dt.NewRow();
                dr["Col1"] = "4";
                dr["Col2"] = "5";
                dr["Col3"] = "6";
                dt.Rows.Add(dr);
     
                dr = dt.NewRow();
                dr["Col1"] = "7";
                dr["Col2"] = "8";
                dr["Col3"] = "9";
                dt.Rows.Add(dr);
     
                dr = dt.NewRow();
                dr["Col1"] = "10";
                dr["Col2"] = "11";
                dr["Col3"] = "12";
                dt.Rows.Add(dr);
     
                dataGridView1.DataSource = dt;
            }

    La c'est l'algo qui permet de retourner dans tout les sens le datagridview
    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
            private void button1_Click(object sender, EventArgs e)
            {
                DataTable dt = dataGridView1.DataSource as DataTable;
     
                DataTable newDT = new DataTable();
                foreach (DataRow createCol in dt.Rows)
                    newDT.Columns.Add("row" + dt.Rows.IndexOf(createCol));  // TO DO faire la gestion des headers
     
                DataRow newDR;
                foreach (DataColumn col in dt.Columns)
                {
                    newDR = newDT.NewRow();
                    for (int i = 0; i < dt.Rows.Count; ++i)
                        newDR[i] = dt.Rows[i].ItemArray[dt.Columns.IndexOf(col)];
                    newDT.Rows.Add(newDR);
                }
     
                dataGridView1.DataSource = newDT;
            }
    tu me pardonneras:
    j'ai pas fait la gestion des headers des colonne/ligne, mais bon faut les recuperer du datagridvew original... cpo compliqué

  4. #4
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    Merci alavoler pour ton aide.

    En fait tu as écrit une fonction pour faire la transposition des colonnes en ligne et des lignes en colonnes.

    Je vais essayer de l'adapter pour faire une fonction de pivot

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Points : 552
    Points
    552
    Par défaut
    rvzip64
    A c'est pour ca que j'ai demandé (assez rapidement) si c'etait bien ce que je pensais... car j'avais un doute

    Je vois pas trop ce que tu veux, pourtant tu as l'air de bien l'avoir exprimé, je ne connais pas les "pivot" c'est sans doute pour ca

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Points : 552
    Points
    552
    Par défaut
    C'est ca que tu veux réaliser?
    http://visualstudiogallery.msdn.micr...2-97325624b0ab


    Parcequ'avec un simple DataGrid ca m'a l'air costo... je ne sais pas ce que les autres en pense...

  7. #7
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    http://en.wikipedia.org/wiki/Pivot_table

    Voici un exemple, aprés je veux un truc tout simple, je veux pas faire un monstre comme dans l'exemple que tu as trouvé ou ils fusionnent les cellules.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Points : 552
    Points
    552
    Par défaut
    rvzip64
    Ah, la version simple est fesable (il faut par contre utiliser des composant ComboListBox à part du DataGrid)
    avec un datatable (tu peux faire des requette sql dessus, tu devrais t'en sortir.
    j'ai déja fait ce genre de truc,
    par contre je peux pas te le coder là maintenant... car c est plus complexe que ce que je t'ai donné avant

    Si d'autre veulent donner un coup de main...

  9. #9
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    J'ai trouvé ça, mais ça plante un peu ...

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
            public static DataTable Pivot(ref DataTable dataValues, string keyColumn, string pivotNameColumn, string pivotValueColumn)
            {
                try
                {
                    DataTable tmp = new DataTable();
                    DataRow r;
                    string LastKey = "//dummy//";
                    int i, pValIndex, pNameIndex;
                    string s;
                    bool FirstRow = true;
     
                    // Add non-pivot columns to the data table:
                    pValIndex = dataValues.Columns.IndexOf(pivotValueColumn);
                    pNameIndex = dataValues.Columns.IndexOf(pivotNameColumn);
     
                    for (i = 0; i <= dataValues.Columns.Count - 1; i++)
                        if (i != pValIndex && i != pNameIndex)
                        {
                            tmp.Columns.Add(dataValues.Columns[i].ColumnName.ToString(), dataValues.Columns[i].DataType);
                        }
                    r = tmp.NewRow();
     
                    // now, fill up the table with the data:
                    foreach (DataRow row in dataValues.Rows)
                    {
                        // see if we need to start a new row
                        if (row[keyColumn].ToString() != LastKey)
                        {
                            // if this isn't the very first row, we need to add the last one to the table
                            if (!FirstRow)
                            {
                                tmp.Rows.Add(r);
                            }
                            r = tmp.NewRow();
                            FirstRow = false;
     
                            // Add all non-pivot column values to the new row:
                            for (i = 0; i <= dataValues.Columns.Count - 3; i++)
                            {
                                r[i] = row[tmp.Columns[i].ColumnName];
                            }
                            LastKey = row[keyColumn].ToString();
                        }
     
                        // assign the pivot values to the proper column; add new columns if needed:
                        s = row[pNameIndex].ToString();
                        if (s.Length > 0)
                        {
                            if (!tmp.Columns.Contains(s) && s != null)
                            {
                                tmp.Columns.Add(s, dataValues.Columns[pValIndex].DataType);
                            }
                            r[s] = row[pValIndex];
                        }
                    }
                    // add that final row to the datatable:
                    tmp.Rows.Add(r);
     
                    // and that's it!
                    return tmp;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    return null;
                }
            }
        }

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Points : 552
    Points
    552
    Par défaut
    rvzip64
    Je pense que tu as bien cherché sur le net...
    Le mieux c'est de coder toi meme ce dont tu as besoin (au moins tu pourra facilement le maintenir)

    J’appréhende pour la gestion des type (date/chiffre/string....)

    Si j'ai le courage ce soir j'essayerais de le coder et te partager le projet (en winform), mais c est pas garanti

  11. #11
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    Merci pour ton aide.

    Je pense que je vais essayer de coder ça moi meme, on va voir si j'y arrive (je suis débutant) ... en delphi j'aurais fais ça en 5 minutes

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Points : 552
    Points
    552
    Par défaut
    Citation Envoyé par rvzip64 Voir le message
    Merci pour ton aide.

    Je pense que je vais essayer de coder ça moi meme, on va voir si j'y arrive (je suis débutant) ... en delphi j'aurais fais ça en 5 minutes

    C'est natif en delphi ?(je ne connais pas cette techno)

  13. #13
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    C'est 10 ans de pratique surtout

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Points : 552
    Points
    552
    Par défaut
    A ba t'es pas debutant alors
    Je pense que delphi n'est pas très éloigné du .net (ou l'inverse)

    héhé bon courage !

  15. #15
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    Je pense que j'ai peut etre trouvé la solution.
    http://muxtonmumbles.blogspot.com/20...-datagrid.html

    Je fais un test

  16. #16
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    Le control marche parfaitement !

    Sujet Clos

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment faire pivoter une animation svp
    Par mantraax dans le forum Flash
    Réponses: 4
    Dernier message: 16/07/2007, 10h27
  2. [VB.NET]Comment faire Pivoter une image
    Par vijeo dans le forum Windows Forms
    Réponses: 1
    Dernier message: 21/09/2006, 08h38
  3. [VB6 ] Comment faire pivoter une IMAGE
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 23
    Dernier message: 09/05/2006, 17h06
  4. Faire pivoter une image dans TImage
    Par Bourak dans le forum Langage
    Réponses: 4
    Dernier message: 17/03/2006, 08h51
  5. Faire pivoter une zone de texte dans un état
    Par YLL dans le forum Access
    Réponses: 3
    Dernier message: 20/02/2006, 20h05

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