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 :

Récupérer la valeur d'un dropdownlist créer dynamiquement dans un gridview


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 70
    Par défaut Récupérer la valeur d'un dropdownlist créer dynamiquement dans un gridview
    Bonjour,

    Voilà, je rencontre un petit soucis dans le développement de ma page web.
    Voici ce que je cherche à obtenir.
    Je récupère d'une base de données divers informations liés à des utilisateurs.
    je renseigne un gridview avec ces infos
    Chaque utilisateur à une ligne dans ce gridview qui peut contenir une ou plusieurs infos dans une seul colonne. ex;
    User 1 | Info 1
    | Info 2
    User 2 | Info 1
    Etc...
    Un user = 1 ligne(row) dans le grid view.
    Au bout de chaque ligne, les bouton delete/edit
    lors d'un edit, je modifie la colonne des infos en remplaçant les label qui les contient par un dropdownlist (modification faite dans mon RowDataBound uniquement pour la ligne sélectionnée)
    Pour créer ces dropdownlist dyniquement, je les créé dans un placeholder placé dans le EditTemplate de mon gridview.

    problème rencontré: lors de mon RowUpdating, il ne retrouve pas les éléments contenus dans mon placeholder, ni aucune des valeurs sélectionner dans les dropdownlist.(element is null)

    J'aimerai savoir si il y a un moyen de placé ces valeurs sélectionner dans un datakey du gridview et dé récupérer ces données lors de l'edit de la ligne ?
    Si oui comment faire et à quelle moment récupéré cette valeur pour la mettre dans le datakey ??

    Est ce possible ?
    Ou avez vous une autre idée ?

    Merci pour votre aide.

  2. #2
    Membre éclairé Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Par défaut
    Bonjour,
    As-tu essayé de récupérer ton contrôle comme ceci dans le row updating ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int index = GridViewAvis.EditIndex;
    GridViewRow row = GridViewAvis.Rows[index];
    DropDownList DDL = (DropDownList)row.FindControl("TaDropDownList");
    Et du coup, tu peux modifier la valeur avec un DDL.SelectedValue.

    Bonne chance !

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 70
    Par défaut
    Oui,
    C'est ce que je fais.
    Dans on _RowUpdating, je recherche le gridview puis la ligne modifié et l'élément qui m'interesse.
    Le problème est que comme la dropdownliste "n'existe" plus au moment du load de la page, il ne retrouve pas la valeur sélectionner avant.

    J'ai donc contourner ça en créant une arraylist dans laquelle j'insère mes dropdownlist.
    Dans le databound de mon grid view, je renseigne les placeholders de mes cellules editer avec les dropdownlist necessaire.
    J'en profite pour placé le curseur des dropdownlist sur une valeur remonté de la base de données.

    Truc amusant mais chi%%t, le rowupadating du datagrid, rétrouve bien le dropdownlist mais avec la valeur sélectionner lors du databound et non pas celle séletionner par l'utilisateur.
    J'ai l'impression que lors du databound, il met à jour le dropdownlist de l'array list et renvoi celui ci lors de l'update de la ligne.

    Voici une partie du code:
    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
    protected void gvwExistingRight_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                //if (e.Row.RowType == DataControlRowType.DataRow && (e.Row.RowState & DataControlRowState.Edit) == DataControlRowState.Edit)
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
     
                    PlaceHolder phrGridObject = (PlaceHolder)e.Row.FindControl("phrGridObject");
                    PlaceHolder phrGridValue = (PlaceHolder)e.Row.FindControl("phrGridValue");
     
                    if (phrGridObject != null && phrGridValue != null)
                    {
                        DataTable tableFactObj = new DataTable();
     
                        Label lblAppliId = (Label)e.Row.FindControl("lblAppId");
                        Label lblRuleId = (Label)e.Row.FindControl("lblRuleId");
     
                        string stringfunction = "SELECT F.OBJ_ID,O.OBJ_LBL_ID, O.OBJ_DDL_ID, VAL_ID FROM GAP_DAT_FACT F, GAP_REF_OBJECT O WHERE USR_ID = '" + hfdUserId.Value + "' AND F.[APP_ID]='" + lblAppliId.Text + "' AND FAC_RULE_ID ='" + lblRuleId.Text + "' AND F.OBJ_ID = O.OBJ_ID ORDER BY F.OBJ_ID";
                        SqlDataReader rdr = CreateReader(stringfunction);
                        tableFactObj.Load(rdr);
                        rdr.Close();
     
                        foreach (DataRow r in tableFactObj.Rows)
                        {
     
                           foreach (Object o in ArrayListObjectDdl)
                            {    
                                DropDownList dropdownlistAttribut = o as DropDownList;
                                if (dropdownlistAttribut.ID == r[2].ToString())
                                {
                                    dropdownlistAttribut.SelectedValue = r[3].ToString();
                                    dropdownlistAttribut.SelectedValue = "8";
                                    dropdownlistAttribut.AutoPostBack = true;
                                    //dropdownlistAttribut.SelectedIndexChanged += new EventHandler(Ddl_SelectedIndexChanged);
                                    Literal literal2 = new Literal();
                                    literal2.Text = "<br />";
                                    phrGridValue.Controls.Add(dropdownlistAttribut);
                                    phrGridValue.Controls.Add(literal2);
     
                                }
                            }
                        }
                        tableFactObj.Dispose();
                        tableFactObj.Reset();
                    }
     
               }
            }
     
     protected void gvwExistingRight_RowUpdating(object sender, GridViewUpdateEventArgs e)
            {
     
                DataTable tableFactObj = new DataTable();
     
                Label lblAppId = (Label)gvwExistingRight.Rows[e.RowIndex].FindControl("lblAppId");
                Label lblRuleId = (Label)gvwExistingRight.Rows[e.RowIndex].FindControl("lblRuleId");
     
                string stringfunction = "SELECT F.OBJ_ID, O.OBJ_DDL_ID, F.VAL_ID FROM GAP_DAT_FACT F, GAP_REF_OBJECT O WHERE USR_ID = '" + hfdUserId.Value + "' AND F.[APP_ID]='" + lblAppId.Text + "' AND FAC_RULE_ID ='" + lblRuleId.Text + "' AND F.OBJ_ID = O.OBJ_ID ORDER BY F.OBJ_ID";
                SqlDataReader rdr = CreateReader(stringfunction);
                tableFactObj.Load(rdr);
                rdr.Close();
     
                foreach (DataRow r in tableFactObj.Rows)
                {
                    //string NewValue;
     
                    foreach (Object o in ArrayListObjectDdl)
                    {
                        DropDownList dropdownlistAttribut = o as DropDownList;
     
                        if (dropdownlistAttribut.ID == r[1].ToString() && dropdownlistAttribut.SelectedValue != r[2].ToString())
                        {
                            TextBox tbxCalGridrStart = (TextBox)gvwExistingRight.Rows[e.RowIndex].FindControl("tbxCalGridrStart");  //textbox Start Date
                            TextBox tbxCalGridrEnd = (TextBox)gvwExistingRight.Rows[e.RowIndex].FindControl("tbxCalGridrEnd");      //textbox End Date
                            String UpdateDate = DateTime.Today.Year + "-" + DateTime.Today.Month + "-" + DateTime.Today.Day;        // Mettre ici la date de mise a jour
     
                            stringfunction = UpdateFact(hfdUserId.Value, lblAppId.Text.ToString(), lblRuleId.Text.ToString(), r[0].ToString(), dropdownlistAttribut.SelectedValue.ToString(), tbxCalGridrStart.Text.ToString(), tbxCalGridrEnd.Text.ToString(), UpdateDate);
                            SqlDataReader Fac_id = CreateReader(stringfunction);
                            Fac_id.Read();
                            stringfunction = LogInsertFact(Fac_id[0].ToString(), "UPDATE");
                            InsertReader(stringfunction);
                        }
                    }
                }
                tableFactObj.Dispose();
                tableFactObj.Reset();
     
                gvwExistingRight.EditIndex = -1;
                LoadDataGrid(hfdUserId.Value);
            }
    Si vous avez la moindre idée, je suis preneur.
    Je me suis cassé la tête dessus tout le we.

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 70
    Par défaut
    C'est bon, j'ai trouvé,

    Merci à ceux qui ont cherché.
    J'utilise un repeater dans mon DataBound de cette façon:
    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
    Repeater rprGridView = (Repeater)e.Row.FindControl("rprGridView");
    // permet de créer une collection d'entier quiservira de datasource [0, ..., n]
                        IEnumerable<int> data = Enumerable.Range(0, tableFactObj.Rows.Count);
                        rprGridView.DataSource = data;
                        rprGridView.DataBind();
    int loop = 0;
                            foreach (RepeaterItem item in rprGridView.Items)
                            {
                                if (parseObject == loop)
                                {
                                    if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
                                    {
                                        DropDownList ddlRepeater = item.FindControl("ddlRepeater") as DropDownList;
                                        stringfunction = GetFildList(r[0].ToString());
                                        rdr = CreateReader(stringfunction);
                                        rdt.Load(rdr);
                                        rdr.Close();
     
                                        HiddenField hfdRepeater = item.FindControl("hfdRepeater") as HiddenField;
                                        hfdRepeater.Value = r[2].ToString();
     
                                        //Insertion des valeurs dans la ddl
                                        ddlRepeater.DataSource = CreateDataView2();
                                        ddlRepeater.DataTextField = "TextField";
                                        ddlRepeater.DataValueField = "ValueField";
                                        ddlRepeater.DataBind();
                                        ddlRepeater.Visible = true;
                                        ddlRepeater.SelectedValue = r[3].ToString();
     
                                        rdt.Dispose();
                                        rdt.Reset();
                                    }                                
                                }
                                loop += 1;                            
                            }
                            parseObject += 1;
    Et hop ca marche.
    C'est magique ce truc !!

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

Discussions similaires

  1. [AC-2007] récupérer valeur d'un controle créer "dynamiquement"
    Par Bulbulle dans le forum VBA Access
    Réponses: 4
    Dernier message: 27/05/2010, 14h06
  2. Réponses: 8
    Dernier message: 17/06/2009, 16h40
  3. Récupérer la valeur de ma DropDownList.
    Par LestoK dans le forum ASP.NET
    Réponses: 4
    Dernier message: 30/06/2008, 17h31
  4. Récupérer la valeur d'un DropDownList
    Par rad_hass dans le forum C#
    Réponses: 1
    Dernier message: 19/02/2008, 16h55
  5. récupérer la valeur d'une liste déroulante dynamique
    Par grinder59 dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 23/01/2006, 17h51

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