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 :

Ajouter une ligne manuellement dans un GridView


Sujet :

ASP.NET

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2010
    Messages : 292
    Points : 134
    Points
    134
    Par défaut Ajouter une ligne manuellement dans un GridView
    Bonjour,


    J'ai vu que cette question avait été posée mais je n'ai pas vu de réponse concluante concernant mon cas. En fait, je lie un GridView à un DataSource en code-behind. Au final, mon GridView a un certain nombre de lignes et quatre colonnes.

    Est-ce possible d'ajouter une ligne en plus (une ligne pour calculer un total), car j'ai vu que je ne pouvais pas faire quelque chose du genre "MaGridView.Rows.Add(MaGridViewRow)" ?


    Merci d'avance de votre aide.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 95
    Points : 66
    Points
    66
    Par défaut
    Plutot que d'ajouter une ligne dans la grille, pourquoi ne pas la rajouter dans ton datasource (datatable ?), avant le bind

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2010
    Messages : 292
    Points : 134
    Points
    134
    Par défaut
    Comment ça ? Car dans le code-behind, j'ai un DataSource de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SqlDataSource test = new SqlDataSource("requête SQL", SqlConnection);
    Et plus loin, je lie mon GridView :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GridViewTest.DataBind();

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 95
    Points : 66
    Points
    66
    Par défaut
    Avec un sqldatasource, c'est plus compliqué

    Si tu étais passé par un objet command puis que tu aies obtenu une datatable, tu aurais pu faire un add dessus entre tes deux lignes.

    Sinon, faire un "union all" dans ta requête sql pour faire apparaitre la ligne que tu veux, c'est pas possible ?

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2010
    Messages : 292
    Points : 134
    Points
    134
    Par défaut
    Je ne connais pas "union all", quelle syntaxe pour l'utiliser ?
    Tout ce que je peux te dire, c'est qu'après avoir lié ma GridView, j'obtiens une colonne de nombres et je voudrais ajouter une ligne par la suite avec le total de ces nombres dans la cellule que je souhaite.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 95
    Points : 66
    Points
    66
    Par défaut
    Tu peux laisser la première partie de ta requête identique a actuellement

    puis rajouter un "union all"
    et à la suite refaire la même requêtes mais avec un sum() sur chaque champ et un group by qui va bien à la fin

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Select chiffre1,chiffre2,chiffre3,chiffre4
    from matable
    where <condition>
    union all
    Select sum(chiffre1),sum(chiffre2),sum(chiffre3),sum(chiffre4)
    from matable
    where <condition>
    group by <condition>
    Le problème est de pouvoir différencier celà dans ta grid view. Il faudrait sans doute ajouter une nouvelle colone "type" qui te permettra, dans ta grid view, de faire passer la ligne de type "total" en gras pour la différencier des autres.

    il te reste sinon une solution "bizarre" consistant à créer une autre grid view, renseignée qu'avec les sum

  7. #7
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2010
    Messages : 292
    Points : 134
    Points
    134
    Par défaut
    Ouais je vois, mais là, ça va créer une colonne en plus (tous les SUM) non ?
    Parce qu'en fait, j'ai juste besoin d'afficher qu'une cellule en fait dans la ligne supplémentaire (le total de tous mes nombres). Genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaGridView.LigneSupplémentaire.Cells[index souhaité].Text = "total";

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 95
    Points : 66
    Points
    66
    Par défaut
    dans mon exemple, ca créée pas de colonne en plus : ca créé une ligne avec tous les sums de tes 4 colonnes

    Si tu veux qu'une seule colonne renseignée avec le total, tu peux convertir tes 4 champs, dans le sql en char (en utilisant convert(char,mazonenumber) sur sql server)

    Du coup, dans le union all tu ne fais plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select sum(chiffre1),sum(chiffre2),sum(chiffre3),sum(chiffre4)
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select '','','TOTAL',convert(char,sum(ma_zone))
    et tu auras donc dans ta grille tes x lignes comme tu les as déjà
    puis 1 ligne avec les deux premières colones vides, la troisième avec écrit "total" et la quatrieme avec ton résultat

    Tu es en quelle base : sql server ?

  9. #9
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2010
    Messages : 292
    Points : 134
    Points
    134
    Par défaut
    Ouais je suis en SQL Server. Si j'ai bien compris, "ma zone" va correspondre à l'ensemble des nombres, donc je n'ai qu'à mettre la propriété correspondante ? Dans mon cas, la propriété est "gain".

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 95
    Points : 66
    Points
    66
    Par défaut
    "ma_zone" ou "mon_champ", c'est comme tu veux.

    C'est juste pour dire que tu fais un calcul de somme pour ta valeur souhaitée à cet endroit de la requête

  11. #11
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2010
    Messages : 292
    Points : 134
    Points
    134
    Par défaut
    J'ai une erreur de conversion DateTime, voilà la requête :

    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
     
    "SELECT [MyPanel-ContactLog].[surveyname], Description, contactdatetime, gain " +
    "FROM [MyPanel-ContactLog] " +
    "INNER JOIN [Surveys] ON [MyPanel-ContactLog].[surveyname] = [Surveys].[SurveyName] " +
    "WHERE ([MyPanel-ContactLog].[surveyname]
    NOT IN (
    SELECT projectname " +
    "FROM [MyPanel-Payements]" +                                                                                                      "WHERE (panelguid = @panelguid))) " +
    "AND ([MyPanel-ContactLog].panelGuid = @panelguid)" +
    "UNION ALL " +
    "SELECT '', '', 'TOTAL :', SUM(gain) " +
    "FROM [MyPanel-ContactLog] " +
    "WHERE ([MyPanel-ContactLog].[surveyname] 
    NOT IN (
    SELECT projectname " +
    "FROM [MyPanel-Payements] " +                                                                                                 "WHERE (panelguid = @panelguid))) " +                                                                                                  "AND ([MyPanel-ContactLog].panelGuid = @panelguid)"););
    Désolé qu'elle soit si longue, mais la syntaxe est-elle bonne ? (ne fais pas attention aux guillemets que j'ai enlevés, c'est pour que tu vois mieux ^^)

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 95
    Points : 66
    Points
    66
    Par défaut
    Avant et après le union all, tu dois avoir des champs de même type, c'est pour celà que je te parlais avant de "convert"

    Ainsi, il faut t'assurer que tes champs du premier select
    ([MyPanel-ContactLog].[surveyname], Description, contactdatetime, gain)

    soient tous en caractère vu qu'après le union all, tu liste des champs caractères dans ton select

    Par exemple, si "contactdatetime" est un datetime, tu dois le remplacer par "convert(char,contactdatetime,103)"
    Idem pour gain : si c'est du decimal, tu dois le remplacer par
    convert(char,gain)

    Ton premier select ainsi modifié devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select [MyPanel-ContactLog].[surveyname], Description, convert(char,contactdatetime,103), convert(char,gain)

  13. #13
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2010
    Messages : 292
    Points : 134
    Points
    134
    Par défaut
    Effectivement ta solution marche mais en fait, j'ai trouvé autre chose pour mon problème, certes compliquée mais bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <table class="total_table">
        <tr>
            <td style="width: 101px; padding-right: 10px; height: 25px;">
            TOTAL :
            </td>
            <td id="value_total" runat="server" style="width: 76px; border-left: solid 1px Black; padding-right: 10px; height: 25px;">
            </td>
        </tr>
    </table>
    La deuxième colonne récupère le total et le "petit" tableau se situe juste en-dessous de la GridView.

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

Discussions similaires

  1. [Débutant] [MVC 2]Ajouter une ligne dynamiquement dans un tablean
    Par John.BE dans le forum ASP.NET MVC
    Réponses: 9
    Dernier message: 23/10/2013, 11h28
  2. Ajouter une ligne vide dans un datagrid
    Par aallal dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 15/10/2008, 12h30
  3. [VB Sax] Ajouter une référence manuellement dans un macro *.bas
    Par Miles Raymond dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/04/2008, 09h31
  4. Ajouter une ligne dans un gridview
    Par The eye dans le forum VB.NET
    Réponses: 1
    Dernier message: 29/01/2008, 00h15
  5. Ajouter une ligne verticale dans un graphique
    Par slayer23 dans le forum MATLAB
    Réponses: 18
    Dernier message: 17/07/2007, 09h01

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