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 :

Colspan dans une gridview


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Par défaut Colspan dans une gridview
    BOnjour tous le monde ,



    j'ai une petite question concernant les gridview d'asp.net. Comment pourrais-je obtenir ce genre d'affichage :







    en sachant que pour l'instant j'arrive à obtenir ceci :





    Avec le code suivant :



    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="GV" runat="server" AutoGenerateColumns="false" OnPreRender="gridView_PreRender">
     
                <Columns>
     
                    <asp:BoundField HeaderText="" />
                    <asp:BoundField HeaderText="Num OF" DataField="cod_wo" />
                    <asp:BoundField HeaderText="Num Seq" DataField="dat_sequence" />
                    <asp:BoundField HeaderText="Article" DataField="article"/>
                    <asp:BoundField HeaderText="Qté OF Prévue" DataField="wo_qty" />
                    <asp:BoundField HeaderText="Qté OF Revue" DataField="qty_revue" />
                    <asp:BoundField HeaderText="Composant" DataField="composant" />
                    <asp:BoundField HeaderText="Restant à assigner" DataField="restant_a_assigner" />
                    <asp:BoundField HeaderText="Assignation HU" />
                    <asp:BoundField HeaderText="Qté totale" DataField="qte_totale_assignee" />
                    <asp:BoundField HeaderText="Num HU" DataField="num_hu" />
                    <asp:BoundField HeaderText="Qté" DataField="qte_assignee" />
     
                </Columns>
     
            </asp:GridView>
    et en code behind c# :



    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
    public static void MergeColumns(GridView gridView)
     
            {
     
                gridView.HeaderRow.Cells[0].RowSpan = 2;
     
                gridView.HeaderRow.Cells[1].RowSpan = 2;
     
                gridView.HeaderRow.Cells[2].RowSpan = 2;
     
                gridView.HeaderRow.Cells[3].RowSpan = 2;
     
                gridView.HeaderRow.Cells[4].RowSpan = 2;
     
                gridView.HeaderRow.Cells[5].RowSpan = 2;
     
                gridView.HeaderRow.Cells[6].RowSpan = 2;
     
                gridView.HeaderRow.Cells[7].RowSpan = 2;
     
     
     
                gridView.HeaderRow.Cells[8].ColumnSpan = 3;
     
     
     
            }




    Je vous remercie d'avance

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Essaie avec ce code behind. En gros, on rajoute un header et ensuite on va masquer des cellules afin de pouvoir jouer sur le rowspan et le colspan :

    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
    90
    91
    92
    93
    94
    protected void gridView_RowCreated(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.Header)
        {
            var gv = (GridView)sender;
     
            // Create a new Row
            var headerRow = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Insert);
     
            var headerCell = new TableCell();
     
            // Add empty column
            headerCell = new TableCell();
            headerCell.Text = "";
            headerCell.HorizontalAlign = HorizontalAlign.Center;
            headerCell.RowSpan = 2;
            headerRow.Cells.Add(headerCell);
     
            // Add Num OF column
            headerCell = new TableCell();
            headerCell.Text = "Num OF";
            headerCell.HorizontalAlign = HorizontalAlign.Center;
            headerCell.RowSpan = 2;
            headerRow.Cells.Add(headerCell);
     
            // Add Num Seq column
            headerCell = new TableCell();
            headerCell.Text = "Num Seq";
            headerCell.HorizontalAlign = HorizontalAlign.Center;
            headerCell.RowSpan = 2;
            headerRow.Cells.Add(headerCell);
     
            // Add Article column
            headerCell = new TableCell();
            headerCell.Text = "Article";
            headerCell.HorizontalAlign = HorizontalAlign.Center;
            headerCell.RowSpan = 2;
            headerRow.Cells.Add(headerCell);
     
            // Add Qté OF Prévue column
            headerCell = new TableCell();
            headerCell.Text = "Qté OF Prévue";
            headerCell.HorizontalAlign = HorizontalAlign.Center;
            headerCell.RowSpan = 2;
            headerRow.Cells.Add(headerCell);
     
            // Add Qté OF Revue column
            headerCell = new TableCell();
            headerCell.Text = "Qté OF Revue";
            headerCell.HorizontalAlign = HorizontalAlign.Center;
            headerCell.RowSpan = 2;
            headerRow.Cells.Add(headerCell);
     
            // Add Composant column
            headerCell = new TableCell();
            headerCell.Text = "Composant";
            headerCell.HorizontalAlign = HorizontalAlign.Center;
            headerCell.RowSpan = 2;
            headerRow.Cells.Add(headerCell);
     
            // Add Restant à assigner column
            headerCell = new TableCell();
            headerCell.Text = "Restant à assigner";
            headerCell.HorizontalAlign = HorizontalAlign.Center;
            headerCell.RowSpan = 2;
            headerRow.Cells.Add(headerCell);
     
            // Add Assignation HU column
            headerCell = new TableCell();
            headerCell.Text = "Assignation HU";
            headerCell.HorizontalAlign = HorizontalAlign.Center;
            headerCell.ColumnSpan = 3;
            headerRow.Cells.Add(headerCell);
     
     
            // Add Header Row to the GridView
            gv.Controls[0].Controls.AddAt(0, headerRow);
        }
    }
     
    protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.Header)
        {
            e.Row.Cells[0].Visible = false;
            e.Row.Cells[1].Visible = false;
            e.Row.Cells[2].Visible = false;
            e.Row.Cells[3].Visible = false;
            e.Row.Cells[4].Visible = false;
            e.Row.Cells[5].Visible = false;
            e.Row.Cells[6].Visible = false;
            e.Row.Cells[7].Visible = false;
        }
    }

    Et bien sûr ne pas oublier de référencer ces méthodes côté ASPX :
    Code ASPX : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:GridView ID="GV" runat="server" OnRowDataBound="gridView_RowDataBound" OnRowCreated="gridView_RowCreated">
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Par défaut
    Merci bien j'avais pensé à un truc comme ça mais je ne voyais pas du tout comment faire je vais essayer. Au passage, une autre petite question, pour l'instant je complète mon GridView à partir d'un DataSet qui contient des données de ma base. Tu pense que c'est possible de le remplir plutôt avec des données de cette bases + des données que j'aurais ajouter à la main ? Voir même de remplir le gridview avec des contrôles ?

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par paladice Voir le message
    Tu pense que c'est possible de le remplir plutôt avec des données de cette bases + des données que j'aurais ajouter à la main ?
    Oui c'est possible, cependant c'est bizarre de procéder comme ça Tu peux intervenir sur l'évènement RowDataBound.

    Citation Envoyé par paladice Voir le message
    Voir même de remplir le gridview avec des contrôles ?
    Oui ça aussi c'est faisable mais il faut voir ce que tu souhaites faire concrètement.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Par défaut
    Merci pour tes réponses.
    Concrètement, ce que j'obtiens en html pour l'instant ce sont de simple
    <td>valeurVenantDeLaBD</td>.
    J'aimerais personnalisé les cellules pour qu'à la fin elle soit plutôt du genre
    <td id="..." class="..." rowspan="...">valeurVenantDeLaBD</td>
    voir aussi avoir un <input...></input> à la place de la valeur.
    Tu as une idée sur ça ?

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par paladice Voir le message
    J'aimerais personnalisé les cellules pour qu'à la fin elle soit plutôt du genre
    <td id="..." class="..." rowspan="...">valeurVenantDeLaBD</td>
    Il te suffit de jouer avec les propriétés de l'objet TableCell. Par exemple pour l'attribut class il suffit de faire headerCell.CssClass.

    Citation Envoyé par paladice Voir le message
    voir aussi avoir un <input...></input> à la place de la valeur.
    Tu as une idée sur ça ?
    Là, il faut faire headerCell.Controls.Add(taDropDownList);.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

Discussions similaires

  1. Problème d'accent dans une GridView
    Par harry25 dans le forum ASP.NET
    Réponses: 8
    Dernier message: 02/09/2009, 14h40
  2. champs cachés dans une gridview
    Par kazoumoulox dans le forum ASP.NET
    Réponses: 16
    Dernier message: 17/07/2007, 15h58
  3. Réponses: 5
    Dernier message: 15/03/2007, 10h08
  4. Réponses: 2
    Dernier message: 26/12/2006, 22h40
  5. Réponses: 1
    Dernier message: 08/09/2006, 18h23

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