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

ASP.NET Discussion :

Affichage des données d'une GridView en double


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    33
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 33
    Par défaut Affichage des données d'une GridView en double
    Bonjour,

    Je développe actuellement un annuaire basé sur Active Directory.
    Cette annuaire sert à lister des informations sur les personnes présentes dans l'entreprise.
    Le résultat d'une recherche est présenté à l'aide d'une gridView.
    La gridView a pour source une DataView, qui a pour source une DataTable.

    L'affichage des données fonctionnait parfaitement jusqu'a ce que je définisse des colonnes à la gridView.
    J'ai du définir ces colonnes pour que l'utilisateur puisse effectuer un trie sur la colonne qu'il désire.

    Le problème c'est que depuis cette modification, lorsque la gridView s'affiche,
    les 9 colonnes ( nom, prénom, email, .... ) s'affiche en plusieurs exemplaires !!
    Et à chaque nouvelle recherche, le nombre de série de 9 colonnes de bases augmente de 2 !!
    1ere recherche : 2 fois 9 colonnes,
    2eme recherche : 4 fois 9 colonnes,
    3eme recherche : 6 fois 9 colonnes,
    etc ....

    J'ai beau cherché je ne vois pas où est mon erreur !!

    Quelqu'un saurait il me dire ce qui provoque ce comportement ??

    Merci d'avance pour votre aide.

    ElViRuS

  2. #2
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Bonjour,

    Tu le fais à quel moment l'ajout des colonnes (si dynamiquement) ? Car il ne faut pas le faire à chaque chargement de la page mais jouer avec le Page.IstPostBack.

    Si tu ne le fais pas dynamiquement mais dans le markup de ta page, pense à bien désactiver AutoGenerateColumns sur ta GridView (mais à ma connaissance ça ne devrait pas provoquer ce problème...)

    En espérant t'avoir aidé.

  3. #3
    Membre averti
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    33
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 33
    Par défaut
    Merci de ta réponse.

    J'ajoute les colonnes dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    protected override void CreateChildControls()
    {
    }
    J'ai bien mis le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     GridView1.AutoGenerateColumns = false;
    C'est quoi le "markup" de ma page ? (Désolé je ne travaille pas depuis longtemps sur cette techno )

    Merci d'avance.

  4. #4
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Le markup c'est le code ASP.NET/HTML, à différencier du code-behind qui correspond à ton code C# (ou vb). Donc pour résumer markup = page.aspx et code-behind : page.cs (ou page.vb).

    Ton problème est simple à chaque PostBack, tu rajoutes les colonnes. As-tu positionné un breakpoint dans ta méthode CreateChildControls pour voir combien de fois elle est appellé suite à un PostBack ?

    Sinon il nous faudrait ton code, ce serait plus simple.

    En espérant t'avoir aidé.

  5. #5
    Membre averti
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    33
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 33
    Par défaut
    Merci pour l'explication

    Le truc c'est que je n'ai pas de Page.aspx .
    En fait je développe une WebPart pour SharePoint donc j'ai deux fichier :
    - Page.ascx ,
    - Page.ascx.cs,

    Si j'ai bien compris ton explication, pour répondre à ta question, je construis
    les colonnes de ma GridView dans le code behind (Page.ascx.cs).

    Voila le code où je mets en place les colonnes :
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    protected override void CreateChildControls()
    {
                 GridView1.AutoGenerateColumns = false;
    	GridView1.DataSource = maDataView;
     
    	// Parametrage des options de pagination
                GridView1.AllowPaging = true;
                GridView1.PageSize = 10;
                GridView1.PagerSettings.Mode = PagerButtons.Numeric;
                GridView1.PageIndexChanging += new GridViewPageEventHandler(GridView1_PageIndexChanging);
     
    	// Parametrage des options de tri
    	GridView1.AllowSorting = true;
                GridView1.Sorting += new GridViewSortEventHandler(GridView1_Sorting);		
     
    	// On définit les colonnes de la gridView
     
    	// On commence par définir le menu sur la colonne "Nom" avec son menu
    	contactListMenu = new MenuTemplate();
    	contactListMenu.ID = "LeMenu";
    	// On définit le premier item de la liste
    	EntreeMenu = new MenuItemTemplate("Nouveau Message", "/_layouts/images/icmsg.gif");
    	EntreeMenu.ClientOnClickNavigateUrl = "mailto:%ColMail%";
    	contactListMenu.Controls.Add(EntreeMenu);
    	// On définit le deuxième item de la liste
    	EntreeMenu = new MenuItemTemplate("Fiche collaborateur", "/_layouts/images/perusr.gif");
    	EntreeMenu.ClientOnClickNavigateUrl = "http://www.google.fr";
    	contactListMenu.Controls.Add(EntreeMenu);
    	Controls.Add(contactListMenu);
     
    	// On définit la colonne "Nom"
    	Colonne1 = new SPMenuField();
    	Colonne1.HeaderText = "Nom";
    	Colonne1.TextFields = "Nom";
    	Colonne1.MenuTemplateId = "LeMenu";
    	Colonne1.NavigateUrlFields = "Nom,E-mail";
    	Colonne1.NavigateUrlFormat = "mailto:{1}";
    	Colonne1.TokenNameAndValueFields = "ColNom=Nom,ColMail=E-mail";
    	Colonne1.SortExpression = "Nom";
    	GridView1.Columns.Add(Colonne1);
     
    	// On définit la colonne "Prénom"
    	Colonne = new BoundField();
    	Colonne.DataField = "Prénom";
    	Colonne.HeaderText = "Prénom";
    	Colonne.SortExpression = "Prenom";
    	GridView1.Columns.Add(Colonne);
     
    	// On définit la colonne "Pôle"
    	Colonne = new BoundField();
                Colonne.DataField = "Pôle";
    	Colonne.HeaderText = "Pôle";
    	Colonne.SortExpression = "Pole";
    	GridView1.Columns.Add(Colonne);
     
    	// On définit la colonne "Entité"
    	Colonne = new BoundField();
    	Colonne.DataField = "Entité";
    	Colonne.HeaderText = "Entité";
    	Colonne.SortExpression = "Entite";
    	GridView1.Columns.Add(Colonne);
     
    	// On définit la colonne "Téléphone"
    	Colonne = new BoundField();
    	Colonne.DataField = "Téléphone";
    	Colonne.HeaderText = "Téléphone";
    	Colonne.SortExpression = "Telephone";
    	GridView1.Columns.Add(Colonne);
     
    	// On définit la colonne "Interne"
    	Colonne = new BoundField();
    	Colonne.DataField = "Interne";
    	Colonne.HeaderText = "Interne";
    	Colonne.SortExpression = "Interne";
    	GridView1.Columns.Add(Colonne);
     
    	// On définit la colonne "Mobile"
    	Colonne = new BoundField();
    	Colonne.DataField = "Mobile";
    	Colonne.HeaderText = "Mobile";
    	Colonne.SortExpression = "Mobile";
    	GridView1.Columns.Add(Colonne);
     
    	// On définit la colonne "E-mail"
    	Colonne = new BoundField();
    	Colonne.DataField = "E-mail";
    	Colonne.HeaderText = "E-mail";
    	Colonne.SortExpression = "E-mail";
    	GridView1.Columns.Add(Colonne);
     
    	// On définit la colonne "Site"
    	Colonne = new BoundField();
    	Colonne.DataField = "Site";
    	Colonne.HeaderText = "Site";
    	Colonne.SortExpression = "Site";
    	GridView1.Columns.Add(Colonne);
     
    	//GridView1.DataSource = maDataView;
    	//this.Controls.Add(GridView1);
    	//GridView1.PagerTemplate = null;
    	GridView1.DataBind();
     
            base.CreateChildControls();
        }
    Et ça c'est le code où je "mets" les données dans la gridView :
    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
     
    protected void showresults(SearchResultCollection collection)
        {
     
    		try{
     
    			maDataTable = new System.Data.DataTable();
    			maDataTable.Columns.Add(new DataColumn("Nom", typeof(String)));
    			maDataTable.Columns.Add(new DataColumn("Prénom", typeof(String)));
    			maDataTable.Columns.Add(new DataColumn("Pôle", typeof(String)));
    			maDataTable.Columns.Add(new DataColumn("Entité", typeof(String)));
    			maDataTable.Columns.Add(new DataColumn("Téléphone", typeof(String)));
    			maDataTable.Columns.Add(new DataColumn("Interne", typeof(String)));
    			maDataTable.Columns.Add(new DataColumn("Mobile", typeof(String)));
    			maDataTable.Columns.Add(new DataColumn("E-mail", typeof(String)));
    			maDataTable.Columns.Add(new DataColumn("Site", typeof(String)));
     
     
    			foreach (SearchResult result in maCollection)
    			{
    				entry = result.GetDirectoryEntry();
    				DataRow newColDR;
    				newColDR = maDataTable.NewRow();
    				newColDR[0] = entry.Properties["SN"].Value;
    				newColDR[1] = entry.Properties["givenName"].Value;
    				newColDR[2] = entry.Properties["Company"].Value;
    				newColDR[3] = entry.Properties["Department"].Value;
    				newColDR[4] = entry.Properties["telephoneNumber"].Value;
    				newColDR[5] = entry.Properties["ipPhone"].Value;
    				newColDR[6] = entry.Properties["mobile"].Value;
    				newColDR[7] = entry.Properties["mail"].Value;
    				newColDR[8] = entry.Properties["l"].Value;
    				maDataTable.Rows.Add(newColDR);
    			}
     
    			Session["DataTableSession"] = maDataTable.Copy();
    			maDataView = new DataView();
    			maDataView = maDataTable.DefaultView;
    			// Par défaut on trie les résultats par Nom croissant
    			maDataView.Sort = "Nom" + " " + "asc";
     
    			// On "donne" à la GridView les données
    			GridView1.DataSource = maDataView;
    			GridView1.DataBind();
     
    			TXB_TXTRSRECH.Visible = true;
    			GridView1.Enabled = true;
    			GridView1.Visible = true;
    			IBT_XLS.Visible = true;
    			LBL_ICOXLS.Visible = true;
     
    			entry.Close();
    			maDataTable.Dispose();
    			maDataView.Dispose();
    			GridView1.Dispose();
     
    		}catch (Exception ex){
     
    			// Affichage de l'erreur
    			TXB_ERROR.Text += ex.Message;
    			TXB_ERROR.Visible = true;
    		}
     
        }
    Merci pour ton aide

  6. #6
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Je vois pas mal de chose pas très catholiques dans ton code

    Tu n'as semble-t-il pas compris le rôle de la méthode CreateChildControl, je t'invite à consulter la doc MSDN à ce sujet.

    Ensuite, pour un seul chargement de page, tu appelles deux fois la méthode DataBind de ta GridView, ce n'est pas bon. Également, pourquoi souhaites-tu gérér dynamiquement les colonnes de ta Grid alors que tu pourrais les mettre simplement dans le markup de ta page ?

    Également, tu parcours ta collection d'objet pour ensuite en faire une DataTable. Cette étape est inutile, tu pourrais binder directement ta collection dans la GridView.

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

Discussions similaires

  1. [Tableaux] affichage des données d'une base
    Par Nickwell dans le forum Langage
    Réponses: 1
    Dernier message: 29/09/2006, 17h14
  2. limite de l'affichage des donnés dans une Bdgrid
    Par helmis dans le forum Bases de données
    Réponses: 3
    Dernier message: 19/07/2006, 09h15
  3. Affichage des données d'une bdd dans un formulaire
    Par Shekhmet dans le forum Langage
    Réponses: 5
    Dernier message: 04/04/2006, 19h27
  4. [MySQL] Affichage des données d'une base
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 30
    Dernier message: 01/02/2006, 16h35

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