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 :

[C# VS2005] TabPage et gestion de DataGridView


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Par défaut [C# VS2005] TabPage et gestion de DataGridView
    Bonsoir à tous,

    J'ai cherché dans les messages du forums et arpenté longuement les didacticiels, les FAQ et la toile mais je n'ai pas trouvé de solution compléte à mon problème bien que des brides ont été d'un grand secours. C'est pourquoi je l'expose ici.

    Voici ce que je souhaite, dans les grandes lignes, que mon programme fasse :
    - lire un fichier
    - extraire certaines informations de ce fichier
    - présenter ces informations dans différentes listes, elles-mêmes dans des pages différentes. Les listes ont toutes la même présentation i.e. même nombre de colonnes, mêmes entêtes de colonnes.

    Je suis bloqué actuellement par deux choses :
    1 - la gestion des TabPages : si une TabPage existe, je souhaite que sa liste soit enrichis sans création d'une nouvelle TabPage. J'ai essayé (sans doute mal compris et/ou codé) une solution décrite dans ce forum mais sans succés car j'ai toujours des TabPages créés à profusion.
    2 - je dois ajouter les informations à une seule liste, celle de la TabPage qui m'intéresse; les chaînes écrites dans mon code ne sont là que pour des tests actuellement et sans doute devrais-je modifier mon code pour les faire écrire via une autre méthode. Actuellement, je vois, dans tous les listes des TabPages, la même chose alors que je devrais avoir, si j'ai bien compris, le numéro d'index de page de page différent.

    Voici un extrait du code qui me chiffonne :

    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
     
            private void addTabPage(string name)
            {
                TabPage tp = new TabPage(name);
                DataGridView dgv = new DataGridView();
     
                // add the new TabPage if needed
                if (tabControl1.TabPages.Contains(tp) == false)
                {
                    tabControl1.Controls.Add(tp);
     
                    //tabControl1.
     
                    DataGridViewTextBoxColumn flag = new DataGridViewTextBoxColumn();
                    DataGridViewTextBoxColumn espId = new DataGridViewTextBoxColumn();
                    DataGridViewTextBoxColumn espFull = new DataGridViewTextBoxColumn();
                    DataGridViewTextBoxColumn userFull = new DataGridViewTextBoxColumn();
     
                    flag.HeaderText = "F";
                    flag.Name = "FLAG";
                    flag.ReadOnly = true;
                    espId.HeaderText = "ID";
                    espId.Name = "espId";
                    espId.ReadOnly = true;
                    espFull.HeaderText = "Original Name";
                    espFull.Name = "espFull";
                    espFull.ReadOnly = true;
                    userFull.HeaderText = "Translated Name";
                    userFull.Name = "userFull";
     
                    dgv.AllowUserToAddRows = false;
                    dgv.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { flag, espId, espFull, userFull });
                    dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
     
                    tp.Controls.Add(dgv);
                    int number = tabControl1.SelectedIndex;
                    string[] row = new string[]{"!", number.ToString(),"My very old chestnut horse", " "};
                    dgv.Rows.Add(row);
                }
                else
                {
                    tabControl1.SelectTab(tp);
                    int number = tabControl1.SelectedIndex;
                    string[] row = new string[] { "?", number.ToString(), "My very big car", " " };
                    dgv.Rows.Add(row);
                }
            }
    Je suis preneur de la moindre suggestion qui me permettrait d'avancer.

    Merci d'avance.

  2. #2
    Membre confirmé Avatar de Mathieu.Nanoux
    Étudiant
    Inscrit en
    Février 2004
    Messages
    166
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 166
    Par défaut
    tu recherche dans ta tabcontrol, une tabpage que tu viens de créer, donc tu ne saurai pas la trouver.

    C'est par rapport à quoi que tu choisis ta tabpage ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Par défaut
    En fait les TabPages sont créées dynamiquement et si une TabPage déjà nommée "name" existe c'est elle que je veux sélectionner.

  4. #4
    Membre confirmé Avatar de Mathieu.Nanoux
    Étudiant
    Inscrit en
    Février 2004
    Messages
    166
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 166
    Par défaut
    je ferai alors une recherche sur le nom des tabpages.

    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
    TabPage tp = null;
    foreach(TabPage tmp in tabControl1.TabPages)
    {
    	if(tmp.Name == Name)
    	{
    		tabControl1.SelectedTab = tmp;
    		tp = tmp;
    	        break;
    	}
    }
    if(tp == null)
    {
            tp = new TabPage(Name);
    	tp.Name = Name; //tu definis le nom car dans le constructeur, c'est pour le texte de l'onglet
    	tabControl1.Controls.Add(tp);
            tabControl1.SelectedTab = tp;
     
            //ton code pour le datagridview
            ...
    }
     
    //insertion de tes data dans le datagridview
    ...
    voilà ce que je ferai.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Par défaut
    Extra, un problème de réglé. Je n'ai plus que quelques TabPages au lieu de la tripoté que j'avais.

    Merci

    Pour le 2ième point j'ai essayé avec une List, puisque je dois avoir un DGV par TabPages, mais ça ne colle pas avec la déclaration de la variable dgv.

    L'erreur à lieu sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DataGridView dgv = new DataGridView();
    J'obtient le message :
    "Erreur 6 A local variable named 'dgv' cannot be declared in this scope because it would give a different meaning to 'dgv', which is already used in a 'parent or current' scope to denote something else"

    Mes déclarations de la variable dgv me semble cohérente (toutes des DataGridView) et donc non pas de "different meaning".
    Comment dois-je interpréter le message ?

    Le code modifié :
    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
     
            private void addTabPage(string name)
            {
                TabPage tp = null;
                string[] row = new string[] { " ", " ", " ", " " };
                List<DataGridView> dgvList = null;
                DataGridView dgv = null;
     
                foreach (TabPage tmp in tabControl1.TabPages)
                {
                    if (tmp.Name == name)
                    {
                        tabControl1.SelectedTab = tmp;
                        tp = tmp;
                        int number = tabControl1.SelectedIndex;
                        dgv = dgvList[number];
                        row = new string[] { "?", dgv.RowCount.ToString() + number.ToString(), "My very big car", " " };
                        break;
                    }
                }
     
                if (tp == null)
                {
                    tp = new TabPage(name);
                    tp.Name = name;
                    tabControl1.Controls.Add(tp);
                    tabControl1.SelectedTab = tp;
                    DataGridView dgv = new DataGridView();
                    dgvList.Add(dgv);
                    DataGridViewTextBoxColumn flag = new DataGridViewTextBoxColumn();
                    DataGridViewTextBoxColumn espId = new DataGridViewTextBoxColumn();
                    DataGridViewTextBoxColumn espFull = new DataGridViewTextBoxColumn();
                    DataGridViewTextBoxColumn userFull = new DataGridViewTextBoxColumn();
                    flag.HeaderText = "F";
                    flag.Name = "FLAG";
                    flag.ReadOnly = true;
                    espId.HeaderText = "ID";
                    espId.Name = "espId";
                    espId.ReadOnly = true;
                    espFull.HeaderText = "Original Name";
                    espFull.Name = "espFull";
                    espFull.ReadOnly = true;
                    userFull.HeaderText = "Translated Name";
                    userFull.Name = "userFull";
                    dgv.AllowUserToAddRows = false;
                    dgv.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { flag, espId, espFull, userFull });
                    dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
     
                    tp.Controls.Add(dgv);
                    int number = tabControl1.SelectedIndex;
                    row = new string[] {"!", dgv.RowCount.ToString() + number.ToString(),"My very old chestnut horse", " "};
                }
                dgv.Rows.Add(row);
            }

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Par défaut
    Finalement j'ai trouvé d'où venez le problème. J'ai modifié la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataGridView dgv = new DataGridView();
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dgv = new DataGridView();
    et modifié le code pour déclarer la liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<DataGridView> dgvList = new List<DataGridView>();
    en variable globale

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

Discussions similaires

  1. [Débutant] Gestion combo datagridview
    Par mikey83 dans le forum VB.NET
    Réponses: 0
    Dernier message: 04/04/2015, 21h08
  2. Gestion du datagridview
    Par jdev23 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 09/09/2007, 22h07
  3. Réponses: 9
    Dernier message: 09/05/2006, 10h52
  4. [C#][VS2005]Actualisation DataGridView
    Par caelum dans le forum Windows Forms
    Réponses: 3
    Dernier message: 27/04/2006, 11h41
  5. [VS2005][VB.Net] Custom Format dans un DataGridView
    Par Vonotar dans le forum VB.NET
    Réponses: 10
    Dernier message: 22/11/2005, 08h15

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