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 :

gridview et e.commandargument = probleme


Sujet :

ASP.NET

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 76
    Points : 33
    Points
    33
    Par défaut gridview et e.commandargument = probleme
    bonjour
    alors voila mon soucis :
    j'ai une gridview qui est remplit par l'utilisateur via des textboxs.
    en gros je stocke dans une liste des données que je renvoie a la gridview.
    j'ai rajouter un bouton supprimer dans celle ci de cette facon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Delete" CssClass="clLnkDetail"
                                OnClientClick="return confirm('Etes vous sûre de vouloir supprimer cette ligne ?');">
                                Supprimer
                            </asp:LinkButton>
                        </ItemTemplate>
                    </asp:TemplateField>
    ensuite dans le code C# j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Delete")
            {
                int index =  Convert.ToInt32(e.CommandArgument);
                GridView2.DeleteRow(index);
            }
    le probleme c'est que e.commandargument ne contient rien d'autre que "" ... je n'arrive pas a trouver pourquoi ... du coup ça me marque comme erreur :
    Le format de la chaîne d'entrée est incorrect.

    si vous pouviez m'aider ca serait sympas

    de plus apres j'ai un bouton update a faire mais la je ne vois pas comment faire dans le code C#... dans l'asp c'est bon ca fait des textbox sur les champs mais je ne vois pas comment lui faire valider l'update...

    merci d'avance pour vos reponse

  2. #2
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    il est vivement consillé de supprimer un enregistrement sur la source de données de ton gridview et de recharger ton GridView.

    C'est normal qu'il n'y a pas de valeur dans CommandArgument vu que tu ne lui en passe pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Delete" CssClass="clLnkDetail" CommandArguments='<%# Eval("TonChamp") %>'                            OnClientClick="return confirm('Etes vous sûre de vouloir supprimer cette ligne ?');">
                                Supprimer
                            </asp:LinkButton>
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 76
    Points : 33
    Points
    33
    Par défaut
    ma source de donnée étant une liste je prefere supprimer a la main
    mais le probleme c'est que je n'ai pas de cellule qui contient le numero de ligne
    j'ai donc rajouter une méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            int i = 0 ;
            foreach (GridViewRow gvr in GridView2.Rows)
            {
                ((LinkButton)gvr.Cells[0].Controls[0]).CommandArgument = i.ToString();
                i++;
            }
    pour avoir un numero de ligne associer mais cela ne fonctionne pas !
    il me met : Impossible d'effectuer un cast d'un objet de type 'System.Web.UI.LiteralControl' en type 'System.Web.UI.WebControls.LinkButton'.

  4. #4
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    ce serait plus simple et plus propre... mais bon c'est toi qui voit


    ton cast n est pas bon..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((LiteralControl)gvr.Cells[0].Controls[0]).CommandArgument
    Ou alors regarde pour selectionner la bonne cellule avec un linkbutton dedans.. pask là celle que tu selectionne, elle contient un label.
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 76
    Points : 33
    Points
    33
    Par défaut
    effectivement le bon control etait le 1 !
    maintenant ca passe jusqu'a
    GridView2.DeleteRow(index);
    ou il me met La suppression n'est pas prise en charge par ObjectDataSource 'ObjectDataSource1' sauf si DeleteMethod est spécifié.

  6. #6
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    c'est une liste de quel type?

    poste un peu de code..
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 76
    Points : 33
    Points
    33
    Par défaut
    bon alors quand je clique sur le bouton pour rajouter une ligne 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
            if (TextBox_barcode.Text != "")
            {
                Label3.Text = "";
                Label4.Text = "";
     
                sb.AppendLine(sb + TextBox_barcode.Text + ";;" + TextBox_sender.Text + ";;;;;;;" + DropDownList_pudoid.SelectedItem.Text
                         + ";;" + DateTime.Now.ToString("yyMMdd") + ";" + DateTime.Now.ToString("yyMMdd") + ";;;;;;;;;DECISION ONE;;;;;;;;");
     
                cEncours enCours = new cEncours(TextBox_sender.Text, TextBox_barcode.Text,
                                                DropDownList_pudoid.SelectedItem.Text, DropDownList_pudoname.SelectedItem.Text,
                                                DateTime.Now.ToString("yyMMdd"), "DECISION ONE", sb);
     
     
                Session["enCoursList"] = cEncours.getEncoursList((List<cEncours>)Session["enCoursList"], enCours);
     
            }
            else
                Label3.Text = "error grabbed a barcode please";
    du coté de l'objet qui va s'occuper de la liste :
    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
     
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Collections.Generic;
    using System.Text;
     
    /// <summary>
    /// Description résumée de cEncours
    /// </summary>
    [Serializable]
    public class cEncours
    {
        private string sender;
        private string barcode;
        private string pudoid;
        private string pudoname;
        private string shipmentdate;
        private string recipient;
        private StringBuilder donnee;
     
        public StringBuilder Donnee
        {
            get { return donnee; }
            set { donnee = value; }
        }
     
     
        public string Pudoid
        {
            get { return pudoid; }
            set { pudoid = value; }
        }
     
        public string Pudoname
        {
            get { return pudoname; }
            set { pudoname = value; }
        }
     
        public string Shipmentdate
        {
            get { return shipmentdate; }
            set { shipmentdate = value; }
        }
     
        public string Recipient
        {
            get { return recipient; }
            set { recipient = value; }
        }
     
        public string Barcode
        {
            get { return barcode; }
            set { barcode = value; }
        }
     
        public string Sender
        {
            get { return sender; }
            set { sender = value; }
        }
     
     
     
        public static List<cEncours> getEncoursList(List<cEncours> enCoursList, cEncours _cEncours)
        {
            enCoursList.Add(_cEncours);
     
            return enCoursList;
        }
     
        public static List<cEncours> getEncoursListToBind(List<cEncours> enCoursList)
        {
            return enCoursList;
        }
     
        public cEncours()
    	{
    	}
     
        public cEncours(string _sender, string _barcode, string _pudoId, 
                        string _pudoName, string _shipmentdate, string _recipient,StringBuilder sb)
        {
            sender = _sender;
            barcode = _barcode;
            pudoid = _pudoId;
            pudoname = _pudoName;
            shipmentdate = _shipmentdate;
            recipient = _recipient;
            donnee = sb;
        }
     
        public StringBuilder renvoiedonnee()
        {
            return donnee;
        }
     
     
    }

  8. #8
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    Je crois que l objet List a une methode Remove.. pouruqoi ne pas l'utiliser pour supprimer ton objet de la liste...

    si tu as pluieurs object dans la liste et que tu veux supprimer ceux dont une propriété a une valeur précise tu peux faire un Foreach pour parcourir tout les elements
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 76
    Points : 33
    Points
    33
    Par défaut
    étant donné que je ne me sent pas trop a l'aise avec ces listes j'ai tenté de refaire mon appli diffrement
    mais pour ca il faudrais que je rajoute des ligne a ma grid view
    j'ai essayer comme ca mais j'ai encore un probleme sur le cast :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            int index = GridView1.Rows.Count;
            Table t = (Table)GridView1;
            GridViewRow gvr = new GridViewRow(-1, -1, DataControlRowType.EmptyDataRow, DataControlRowState.Normal);
            t.Rows.Add(gvr);
    sinon pour supprimer de la liste directement vais quand meme essayer

    merci beaucoup de ton aide en tout cas !!!

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 76
    Points : 33
    Points
    33
    Par défaut
    je suis repartit sur la suppression comme tu me le conseille sur ma source de donnée !
    le probleme c'est que je n'arrive pas a voir comment faire ...
    j'ai essayer ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        public static List<cEncours> removeEncoursList(List<cEncours> enCoursList, cEncours _cEncours)
        {
            if (enCoursList.Count != 0)
            enCoursList.Remove(_cEncours);
     
            return enCoursList;
        }
    et je met ca dans l'event supprimer de l'objet data source mais quand il arrive a cette méthode la liste d'encour est vide...
    je ne vois pas comment faire ...

  11. #11
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 49
    Points : 39
    Points
    39
    Par défaut
    Salut !

    J'ai un exemple de code à te proposer. Pour un projet, j'ai mis en place une gridview liée à une liste en session (sans objectdatasource).

    Voici les bouts de code pour supprimer un élément de la liste :
    Dans la page aspx :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <asp:GridView ID="gvIntervenants" runat="server" 
                                autogeneratecolumns="false"
                                cellpadding="0"  
                                gridlines="none" OnDataBound="gvIntervenants_DataBound" 
                                OnRowDeleting="gvIntervenants_RowDeleting"
                                Width="100%" OnRowCommand="gvIntervenants_RowCommand" 
                                AllowPaging="true" PageSize="50">
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <asp:TemplateField HeaderText="Suppr.">
                                        <ItemStyle HorizontalAlign="Center" VerticalAlign="Bottom" Width="30px"/>
                                        <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" />
                                        <ItemTemplate>
                                            <asp:ImageButton ID="btnSupprIntervenant" runat="server"
                                                 OnClientClick="return confirm('Êtes-vous sûr de vouloir supprimer cet intervenant ?');"
                                                 ImageUrl="~/Images/cross.png" 
                                                 CommandName="Delete"
                                                 CausesValidation="false"
                                                 CommandArgument="<%# Container.DataItemIndex %>" />
                                        </ItemTemplate>            
                                    </asp:TemplateField>
    Ensuite, dans le code behind :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    protected void gvIntervenants_RowDeleting(Object sender, GridViewDeleteEventArgs 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
     
    protected void gvIntervenants_RowCommand(Object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Delete")
            {
                // Index de l'intervenant à supprimer
                int index = Convert.ToInt32(e.CommandArgument);
     
                // Récupère la liste des intervenants stockée dans le viewstate
                intervenants = (System.Collections.Generic.IList<LigneIntervenant>)ViewState["intervenants"];
     
                // Suppression de l'élément
                intervenants.RemoveAt(index);
     
                // On stocke la nouvelle liste dans le viewstate
                ViewState["intervenants"] = intervenants;
     
                // MAJ affichage
                gvIntervenants.DataSource = intervenants;
                gvIntervenants.DataBind();
            }
        }
    J'espère que ça pourra t'aider un peu...

    a+

  12. #12
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    J'ai un peu de peine avec ta classe cEncours, elle me semble bizarre comme c'est conçu. Mais Explique moi dans quel contexte tu fais ça.. à quoi te sert ta classe... et surtout montre moi comment tu les ta liste avec ton GridView. (Aussi la declaration)

    Merci bcp

    Edit,, Désolé j'ai pas vu ton message d'avant :-)
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  13. #13
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    Montre moi juste comment tu constitue la liste avant de l'attacher à la Gridvew

    Merci
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 76
    Points : 33
    Points
    33
    Par défaut
    bon voici le code :
    lors de l'appuis sur le bouton pour ajotuer une ligne (sb est une stringbuilder) :
    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
        protected void Button1_Click(object sender, EventArgs e)
        {
            if (TextBox_barcode.Text != "")
            {
                Label3.Text = "";
                Label4.Text = "";
     
                sb.AppendLine(sb + TextBox_barcode.Text + ";;" + TextBox_sender.Text + ";;;;;;;" + DropDownList_pudoid.SelectedItem.Text
                         + ";;" + DateTime.Now.ToString("yyMMdd") + ";" + DateTime.Now.ToString("yyMMdd") + ";;;;;;;;;DECISION ONE;;;;;;;;");
     
                cEncours enCours = new cEncours(TextBox_sender.Text, TextBox_barcode.Text,
                                                DropDownList_pudoid.SelectedItem.Text, DropDownList_pudoname.SelectedItem.Text,
                                                DateTime.Now.ToString("yyMMdd"), "DECISION ONE", sb);
     
     
                Session["enCoursList"] = cEncours.getEncoursList((List<cEncours>)Session["enCoursList"], enCours);
     
            }
            else
                Label3.Text = "error grabbed a barcode please";
        }
    et voici les élément appeler de l'objet cencours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        public static List<cEncours> getEncoursList(List<cEncours> enCoursList, cEncours _cEncours)
        {
            if (_cEncours != null)
            enCoursList.Add(_cEncours);
     
            return enCoursList;
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        public cEncours(string _sender, string _barcode, string _pudoId, 
                        string _pudoName, string _shipmentdate, string _recipient,StringBuilder sb)
        {
            sender = _sender;
            barcode = _barcode;
            pudoid = _pudoId;
            pudoname = _pudoName;
            shipmentdate = _shipmentdate;
            recipient = _recipient;
            donnee = sb;
        }
    et pour afficher le tout j'ai cette fonction qui est dans le select de l'objetdatasource :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        public static List<cEncours> getEncoursListToBind(List<cEncours> enCoursList)
        {
            return enCoursList;
        }

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 76
    Points : 33
    Points
    33
    Par défaut
    desoler pour le double poste !
    merci beaucoup alexandre je ne connaissais pas le removeat et du coup j'ai fait autrement pour supprimer ma ligne...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            if (e.CommandName == "Delete")
            {
                int index =  Convert.ToInt32(e.CommandArgument);
     
                Session["enCoursList"] = cEncours.getEncoursList((List<cEncours>)Session["enCoursList"], null);
     
                ((List<cEncours>)Session["enCoursList"]).RemoveAt(index);
     
            }
    et la ca marche nikel ! merci beaucoup !
    bon me reste l'update maintenant ... ca va etre encore plus drole je sent lol

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

Discussions similaires

  1. [VB.NET] gridview RowDataBound probleme
    Par barnet dans le forum ASP.NET
    Réponses: 5
    Dernier message: 04/06/2007, 13h40
  2. [ASP.net][GridView] Probleme sur un update
    Par jeromechezgdf dans le forum ASP.NET
    Réponses: 6
    Dernier message: 31/05/2007, 17h23
  3. [Debutant] Probleme d'affichage de mon Gridview
    Par sebium dans le forum ASP.NET
    Réponses: 1
    Dernier message: 26/05/2007, 14h05
  4. [asp.net2] Probleme avec GridView
    Par mikky dans le forum ASP.NET
    Réponses: 7
    Dernier message: 21/02/2007, 16h38
  5. Gridview : probleme de pagination
    Par LOUPO dans le forum ASP.NET
    Réponses: 2
    Dernier message: 04/07/2006, 16h08

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