salut,
Comme mon titre l'indique j'aimerais que quand je passe mon gridview en mode edit. Que la valeur du dropdownlist soit positionné sur la bonne valeur.
merci
salut,
Comme mon titre l'indique j'aimerais que quand je passe mon gridview en mode edit. Que la valeur du dropdownlist soit positionné sur la bonne valeur.
merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part <asp:DropDownList ID="ddl" runat="server" SelectedValue='<%# Bind("nom_du_champ") %>'/>
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
salut,
J'avais déjà testé cette solution mais le problème est qu'il me lance une InvalidOpérationException au moment du databind() que je fais dans un event de mon gridview, rowcreated:
Les méthodes de liaison de données telles que Eval(), XPath() et Bind() peuvent uniquement être utilisées dans le contexte d'un contrôle lié aux données.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 protected void gridDomaine_RowCreated(object sender, GridViewRowEventArgs e) { dtServeur = catalog.getAllServeur(); //////Remplissage de la liste if (e.Row.FindControl("ddlServeur") != null) { ((DropDownList)e.Row.FindControl("ddlServeur")).DataTextField = dtServeur.Columns["srv_nom"].ToString(); ((DropDownList)e.Row.FindControl("ddlServeur")).DataValueField = dtServeur.Columns["srv_id"].ToString(); ((DropDownList)e.Row.FindControl("ddlServeur")).DataSource = dtServeur; ((DropDownList)e.Row.FindControl("ddlServeur")).DataBind(); } }
MErci de votre aide
ah ok, ta GridView n'est pas bindée à une source de données ? Dans ce cas il suffit d'affecter la SelectedValue dans le code-behind...
Aussi, tu devrais stocker dans une variable le résultat du FindControl pour ne pas avoir à l'appeler à chaque fois...
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
J'ai effectivement mon datagrid qui est bondé avec un autre dataTable.
J'ai fait ceci qui me retourne une exception: argumentOutOfRangeException
'ddlServeur' a un SelectedValue qui n'est pas valide, car il n'existe pas dans la liste des éléments.
Nom du paramètre : value
Mais c'est normal vu que mon dtDomaine a été bindé dans mon page_load.
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 protected void gridDomaine_RowCreated(object sender, GridViewRowEventArgs e) { dtServeur = catalog.getAllServeur(); //////Remplissage de la liste if (e.Row.FindControl("ddlServeur") != null) { ((DropDownList)e.Row.FindControl("ddlServeur")).DataTextField = dtServeur.Columns["srv_nom"].ToString(); ((DropDownList)e.Row.FindControl("ddlServeur")).DataValueField = dtServeur.Columns["srv_id"].ToString(); ((DropDownList)e.Row.FindControl("ddlServeur")).DataSource = dtServeur; ((DropDownList)e.Row.FindControl("ddlServeur")).SelectedValue = dtDomaine.Columns["dom_fk_srv"].ToString(); ((DropDownList)e.Row.FindControl("ddlServeur")).DataBind(); } }
Qu'est ce que je dois donc mettre pour le selectedValue?
merci
A mon avis le problème est surtout que tu affectes le SelectedValue avant de faire le DataBind, alors qu'il faut le faire après...
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
toujours la même exception ormis qu'elle me renvoie où je bind mon gridview
ah ok, j'avais pas fait gaffe à la valeur que tu affectais au SelectedValue... là tu lui mets le nom de la colonne, c'est pas ça qu'il faut. Il faut mettre la valeur de la colonne définie comme DataValueField pour l'élément qui doit être sélectionné. Par exemple, dans ton cas, il faut mettre la valeur du srv_id de l'élément qui doit être sélectionné.
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
C'est bien l'id du serveur que j'affiche.
en fait le dataTable dtServeur remplit le ddl avec toutes les valeurs possibles pour un domaine. Et la valeur de l'id qui soit être sélectionné se trouve dans mon dataTable dtDomaine qui remplit mon gridview.
Je sais pas si je suis assez clair
Ben justement, la SelectedValue du DropDownList doit être l'ID du serveur pour la ligne du GridView. Toi tu lui affectes un nom de colonne, alors qu'il faut mettre une valeur d'ID de serveur.
D'ailleurs je ne comprends pas pourquoi le Bind ne marchait pas... tu peux montrer le code que tu avais écrit pour ça ?
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
cette colonne là est un champ dans ma table domaine qui pointe vers l'id de la table serveur pour la row du gridview
Code : Sélectionner tout - Visualiser dans une fenêtre à part dtDomaine.Columns["dom_fk_srv"].ToString();
Oui j'ai bien compris, mais ce code renvoie juste le nom de la colonne, pas la valeur du champ pour la ligne en cours. D'ailleurs ça ne sert à rien d'écrire dtDomaine.Columns["dom_fk_srv"].ToString(), c'est exactement comme si tu écrivais juste "dom_fk_srv"
Pour récupérer la valeur et l'affecter au SelectedValue tu peux faire ça :
Par contre je suis pas sûr que le DataItem soit déjà accessible dans l'évènement RowCreated, il faut peut-être faire ça dans l'évènement RowDataBound
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 DropDownList ddl = e.Row.FindControl("ddlServeur") as DropDownList; DataRowView drv = e.Row.DataItem as DataRowView; ddl.SelectedValue = drv["dom_fk_srv"];
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
merci beaucoup tout fonctionne
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager