Récupérée valeur d'1 dropdownlist dans 1 gridview [Résolu]

Signaler
Messages postés
23
Date d'inscription
mardi 11 juillet 2006
Statut
Membre
Dernière intervention
27 octobre 2008
-
Messages postés
23
Date d'inscription
mardi 11 juillet 2006
Statut
Membre
Dernière intervention
27 octobre 2008
-
Voici le code de la page aspx.

3 réponses

Messages postés
23
Date d'inscription
mardi 11 juillet 2006
Statut
Membre
Dernière intervention
27 octobre 2008

La méthode FiltrerParIdRecupere était involontairement récursive à l'infini.
SqlDataSource.DataBinf() ou SqlData.FilterExpression déclenchant eux-même l'évenement Selecting.
Voilà la source de mon erreur.


J'ai résolu le problème en désabonnant la fonction FilterParIdRecuperer de l'évenement Selecting., au sein du code de la fonction.
Du coup plus de problème de récursivité intenpestif.


protected void FiltrerParIdRecupere(object sender, SqlDataSourceSelectingEventArgs e)
   {
       //Filtrer Gridview Liste Projets si id récupéré
       if (Request.QueryString["id"] != null)
       {
           SqlDataSourceListeProjets.Selecting -= SqlSqlDataSourceSelectingEventHandlers(FiltrerParIdRecupere);            SqlDataSourceListeProjets.FilterExpression "id_projet'{0}'";
            QueryStringParameter id_projet = new QueryStringParameter();
            id_projet.QueryStringField = "id";
            SqlDataSourceListeProjets.FilterParameters.Add(id_projet);
            gvListeProjetsPourArbitrage.DataBind();
       }
    }

Herwin
Messages postés
148
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2009

Tu dois reccuperer la rows, après tu reccupère ton dropdownList. Tu peut le faire par exemple en implémentant l'évenement RowEditing de ton GridView :



protectedvoid gvListeProjetsPourArbitrage_RowEditing(object sender, GridViewEditEventArgs e)
{
   DropDownList DDL = newDropDownList();
   DDL = (DropDownList)gvListeProjetsPourArbitrage.Rows[e.NewEditIndex].FindControl("ddlPriorit‚");
}
Messages postés
23
Date d'inscription
mardi 11 juillet 2006
Statut
Membre
Dernière intervention
27 octobre 2008

Merci pour ta réponse,


En fait j'ai résolu partiellement mon pb.

C'est bien la fonction FiltrerParIdRecupere que j'ai ajoutée récemment, appelée au

Load du sqldatasource, qui m'empéchait de récupérer la valeur de la

dropdownlist.


 protected void FiltrerParIdRecupere(object sender, EventArgs e)
>     {
>         //Filtrer Gridview Liste Projets si id récupéré
>         if (Request.QueryString["id"] != null)
>         {>             SqlDataSourceListeProjets.FilterExpression "id_projet'{0}'";
>             QueryStringParameter id_projet = new QueryStringParameter();
>             id_projet.QueryStringField = "id";
>             SqlDataSourceListeProjets.FilterParameters.Add(id_projet);
>             gvListeProjetsPourArbitrage.DataBind();
>         }
>     }


Elle modifiait le sqldatasource en ajoutant 1 filtre, calqué sur l'id récupéré

en QueryString. Or, si ma page pour x raison, ne comportait pas d'ID ou plutôt 1

ID vide, page.aspx?id=, alors le filtre se faisait qd même aussi bien sur

l'Update que sur le Select. Et donc l'Update WHERE id =  '', ne donnait rien.

Forcément.


Du coup, j'ai blindé ma structure de contôle  de la fonction

FiltrerParIdRecupere de la façon suivante :

if (Request.QueryString["id"] != null && Request.QueryString["id"].Length  > 0)

{ ...


Mais j'ai aussi décidé d'appeler cette fonction non plus au Load du

SqlDataSource, mais à l'évènement Selecting.


Et là j'ai 1 nouveau souci : c'est comme si l'évènement Selecting n'avait pas

lieu qu'1 fois (lorsque la commande Sql est exécutée), mais des dizaines de fois

:

J'ai mis 1 point d'arrêt, et  FiltrerParIdRecupere est appelé des dizaines de

fois, jusqu'à ce que j'ai une erreur de type 'dépassement de la pile stack

overflow...'. Je pense que c'est le

SqlDataSourceListeProjets.FilterParameters.Add(QueryStringParameter id_projet)

qui est débordé.

Herwin