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 :

Garder visible l'entête d'un gridview


Sujet :

ASP.NET

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    526
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 526
    Par défaut Garder visible l'entête d'un gridview
    Bonjour,

    Je dispose d'un tableau définit par un gridview et dont les données sont issus d'une base de données :

    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
    <asp:GridView ID="GridViewSite" runat="server" OnRowDataBound="GridView1_RowDataBound" AllowPaging="False" 
               AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="Code" 
               DataSourceID="SqlDataSourceSite" BorderColor="#94979A"  CellPadding="10" BackColor="#ECEBEF"  HeaderStyle-BackColor="#6A97D0" AlternatingRowStyle-BackColor="#D2DBE6" HeaderStyle-ForeColor="White">
               <Columns>
     
                   <asp:TemplateField ShowHeader="true">
                    <ItemTemplate>
                        <asp:CheckBox ID="chkBox" runat="server" />
                    </ItemTemplate>
                    <HeaderTemplate>
                        <asp:CheckBox ID="cbSelectAll" runat="server" Text="" />
                    </HeaderTemplate>
        </asp:TemplateField>
     
                   <asp:BoundField DataField="Code" HeaderText="Code" 
                       SortExpression="Code" ShowHeader="true"/>
                   <asp:BoundField DataField="Libellé" HeaderText="Libellé" 
                       SortExpression="Libellé" ShowHeader="true"/>
               </Columns>
           </asp:GridView>
    Ce que je voudrais savoir, c'est comment faire pour que l'entête du tableau reste toujours visible même lorsque la requête sur les données ne retourne aucun résultat ?

    Merci.

  2. #2
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Affecte à ta grid une datasource non nulle mais vide lorsque ta source de données réelle ne contient aucun élément.

    Une petite [ame="http://www.google.fr/search?hl=fr&rlz=1G1GGLQ_FRFR290&&sa=X&ei=HZUXTOriI9L24AbCvL2LDA&ved=0CBQQBSgA&q=gridview+show+header+no+results&spell=1="]recherche[/ame] sur le net t'aurais aidé...

  3. #3
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    Recherche du cote javascript css

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    526
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 526
    Par défaut
    J'ai essayé la méthode que calagan99 m'a conseillé :

    protected void Page_Load(object sender, EventArgs e)
    {

    ...

    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
    //Affichage de l'entête du tableau même si la requête ne retourne rien
                    this.EmptyGridFix(GridViewSite);
     
                    if (!this.IsPostBack)
                    {
                        this.LoadGrid();
                    }
     
    ...
              }
     
    protected void LoadGrid()
            {
                DataSet dsMyDataSet = null;
     
                // obtain dataset/datatable from DAL/BAL
     
                GridViewSite.DataSource = dsMyDataSet.Tables[0];
                GridViewSite.DataBind();
     
                this.EmptyGridFix(GridViewSite);
            }
     
     protected void EmptyGridFix(GridView grdView)
        {
            // method code comes here
        }
    Mais j'obtiens un message d'erreur

    La référence d'objet n'est pas définie à une instance d'un objet

    GridViewSite.DataSource = dsMyDataSet.Tables[0];
    Est-ce que quelqu'un verrait d'où vient le problème et à quoi correspond exactement dsMyDataSet ?

    Merci.

  5. #5
    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 : 42
    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,

    Pourquoi réinventer la route à chaque fois ?

    EditItemTemplate et le tour est joué

  6. #6
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Faut réfléchir un minimum quand on copie un code trouvé sur internet hein !!!

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    526
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 526
    Par défaut
    Ton lien EditItemTemplate va quelque part ?

    J'avais déja vu la propriété <EmptyDataTemplate> mais je voudrais non pas avoir un message mais bien avoir l'entête de mes colonnes.

    J'ai bien essayé de représenter cela de cette manière mais c'est pas terrible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <EmptyDataTemplate>
              <asp:CheckBox runat="server"/>
              <asp:HyperLink  Text="Code" runat="server"></asp:HyperLink>
              <asp:HyperLink Text="Libellé" runat="server"></asp:HyperLink>
    </EmptyDataTemplate>

  8. #8
    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 : 42
    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
    Si tu veux afficher les Headers, tu peux t'inspirer de ceci.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    526
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 526
    Par défaut
    Ok mais j'ai voulu intégrer la fonction définit par Matt Berseth dans mon code behind :

    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
    106
    107
    108
    109
    110
    111
    112
     protected override int CreateChildControls(System.Collections.IEnumerable dataSource, bool dataBinding)
            {
                int rows = base.CreateChildControls(dataSource, dataBinding);
     
                //  no data rows created, create empty table if enabled
                if (rows == 0 && (this.ShowFooterWhenEmpty || this.ShowHeaderWhenEmpty))
                {
                    //  create the table
                    Table table = this.CreateChildTable();
     
                    DataControlField[] fields;
                    if (this.AutoGenerateColumns)
                    {
                        PagedDataSource source = new PagedDataSource();
                        source.DataSource = dataSource;
     
                        System.Collections.ICollection autoGeneratedColumns = this.CreateColumns(source, true);
                        fields = new DataControlField[autoGeneratedColumns.Count];
                        autoGeneratedColumns.CopyTo(fields, 0);
                    }
                    else
                    {
                        fields = new DataControlField[this.Columns.Count];
                        this.Columns.CopyTo(fields, 0);
                    }
     
                    if (this.ShowHeaderWhenEmpty)
                    {
                        //  create a new header row
                        GridViewRow headerRow = base.CreateRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal);
                        this.InitializeRow(headerRow, fields);
     
                        //  add the header row to the table
                        table.Rows.Add(headerRow);
                    }
     
                    //  create the empty row
                    GridViewRow emptyRow = new GridViewRow(-1, -1, DataControlRowType.EmptyDataRow, DataControlRowState.Normal);
                    TableCell cell = new TableCell();
                    cell.ColumnSpan = fields.Length;
                    cell.Width = Unit.Percentage(100);
     
                    //  respect the precedence order if both EmptyDataTemplate
                    //  and EmptyDataText are both supplied ...
                    if (this.EmptyDataTemplate != null)
                    {
                        this.EmptyDataTemplate.InstantiateIn(cell);
                    }
                    else if (!string.IsNullOrEmpty(this.EmptyDataText))
                    {
                        cell.Controls.Add(new LiteralControl(EmptyDataText));
                    }
     
                    emptyRow.Cells.Add(cell);
                    table.Rows.Add(emptyRow);
     
                    if (this.ShowFooterWhenEmpty)
                    {
                        //  create footer row
                        GridViewRow footerRow = base.CreateRow(-1, -1, DataControlRowType.Footer, DataControlRowState.Normal);
                        this.InitializeRow(footerRow, fields);
     
                        //  add the footer to the table
                        table.Rows.Add(footerRow);
                    }
     
                    this.Controls.Clear();
                    this.Controls.Add(table);
                }
     
                return rows;
            }
     
            [Category("Behavior")]
            [Themeable(true)]
            [Bindable(BindableSupport.No)]
            public bool ShowHeaderWhenEmpty
            {
                get
                {
                    if (this.ViewState["ShowHeaderWhenEmpty"] == null)
                    {
                        this.ViewState["ShowHeaderWhenEmpty"] = false;
                    }
     
                    return (bool)this.ViewState["ShowHeaderWhenEmpty"];
                }
                set
                {
                    this.ViewState["ShowHeaderWhenEmpty"] = value;
                }
            }
     
            [Category("Behavior")]
            [Themeable(true)]
            [Bindable(BindableSupport.No)]
            public bool ShowFooterWhenEmpty
            {
                get
                {
                    if (this.ViewState["ShowFooterWhenEmpty"] == null)
                    {
                        this.ViewState["ShowFooterWhenEmpty"] = false;
                    }
     
                    return (bool)this.ViewState["ShowFooterWhenEmpty"];
                }
                set
                {
                    this.ViewState["ShowFooterWhenEmpty"] = value;
                }
            }
    Mais j'ai des erreurs me disant que
    "CreateChildTable" , "AutoGenerateColumns","CreateColumns", "Columns","CreateRow", "InitializeRow","EmptyDataTemplate","EmptyDataText" n'ont pas de définition connu.
    De même, j'ai pour "base.CreateChildControls(dataSource, dataBinding)" la remarque
    "Aucune surcharge pour la méthode 'CreateChildControls' ne prend d'argument '2'.
    J'ai pourtant intégrer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Text;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    Est-ce que quelqu'un verrait le problème ? Merci.

  10. #10
    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 : 42
    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


    Tu as un lien vers le code dont s'inspire Matt ici. Il faut lire quand même les tutos au lieu de copier-coller bêtement le code. Comment tu veux apprendre sinon ? Tu n'as pas réalisé une seule seconde que c'était une customisation du contrôle GridView de base ?

Discussions similaires

  1. probleme de gridview"comment visibler un champs daus un gridview "
    Par jakline2010 dans le forum Développement Web avec .NET
    Réponses: 0
    Dernier message: 25/07/2012, 14h18
  2. Visibler un champs dans une Gridview
    Par jakline2010 dans le forum Développement Web avec .NET
    Réponses: 0
    Dernier message: 19/07/2012, 20h02
  3. garder visibles les sous menus
    Par fkba67 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 02/05/2012, 16h16
  4. Réponses: 5
    Dernier message: 01/12/2009, 15h03
  5. Comment modifier la hauteur de l'entète dans un Gridview?
    Par The_Miagiste dans le forum ASP.NET
    Réponses: 3
    Dernier message: 25/08/2009, 15h27

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