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

Résolu
herve_labenere Messages postés 23 Date d'inscription mardi 11 juillet 2006 Statut Membre Dernière intervention 27 octobre 2008 - 4 mars 2008 à 09:31
herve_labenere Messages postés 23 Date d'inscription mardi 11 juillet 2006 Statut Membre Dernière intervention 27 octobre 2008 - 7 mars 2008 à 19:52
Voici le code de la page aspx.

3 réponses

herve_labenere Messages postés 23 Date d'inscription mardi 11 juillet 2006 Statut Membre Dernière intervention 27 octobre 2008
7 mars 2008 à 19:52
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
3
lassaad83 Messages postés 148 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 1 décembre 2009
4 mars 2008 à 10:46
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‚");
}
0
herve_labenere Messages postés 23 Date d'inscription mardi 11 juillet 2006 Statut Membre Dernière intervention 27 octobre 2008
5 mars 2008 à 12:01
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
0
Rejoignez-nous