SuperBouly
Messages postés410Date d'inscriptiondimanche 1 février 2004StatutMembreDernière intervention 8 mai 2010 20 août 2008 à 10:39
Bonjour,
Tu peux commencer par mettre une valeur par défaut à ton champ dans sqlServeur, ce qui évitera le DBNull, si j'ai bien compris ton problème.
Pour le reste, tu peux aussi mettre une expression-test du genre '<%# Expression(Eval("monchamp") )%>' à condition de ne pas mettre la liaison bidirectionnelle (Eval à la place de Bind)
Mais pourquoi binder les selectedIndex ? Enfin, ça c'est toi qui doit le savoir !
SuperBouly
J'ai penser à mettre des valeurs par défaut SQL Server mais je ne sais pas si c'est la meuilleure solution...
C'est quoi la différence entre un Bind("") et un Eval("") ? J'avais essayer avec Eval mais ca n'avais pas marché.
Je Bind mon SelectedIndex car dans ma BDD, j'ai "Y" ou "N" si c'est oui ou non, et que c'est les mêmes résultats que j'ai dans mes ListItem Value.. Comme ceci :
SuperBouly
Messages postés410Date d'inscriptiondimanche 1 février 2004StatutMembreDernière intervention 8 mai 2010 21 août 2008 à 08:15
bonjour,
Je ne vois peut-être pas bien ton problème, mais il me semble que ton champ "monChamp" devrait être un booleen ("bit" dans sqlServeret valant 0 par defaut) . Ensuite ta dropdownList pourrait avoir des values 0 pour Non et 1 pour Oui.
Pour Bind et Eval: pour faire rapide, Bind commande une liaison bidirectionnelle (pour lire , Insert et update) et Eval ne fait que lire.
On ne peut pas écrire par exemple : Text='<%# IIF(Bind('MonChamp')="Y", "Oui", "Non") %>' mais on peut écrireText='<%# IIF(Eval('MonChamp')="Y", "Oui", "Non") %>'
Entièrement d'accord sur l'utilisation du bit, c'est beaucoup plus simple. Seulement, j'ai le même problème pour des DropDownList contenant des nom de régions...
Je suis obligé d'utiliser le Bind vu que c'est un formulaire update.
Quand tu parlais de <%# Expression(Eval("monchamp") )%>
Tu as un exemple d'expression-test ? Car la je ne vois pas trop comment vérifier.
Merci à toi
A++
<hr />
Vous n’avez pas trouvé la réponse que vous recherchez ?
SuperBouly
Messages postés410Date d'inscriptiondimanche 1 février 2004StatutMembreDernière intervention 8 mai 2010 23 août 2008 à 12:01
bonjour,
une expression-test, tu en as une juste au dessus:
IIF(Eval('MonChamp')= "Y", "Oui", "Non")
mais si tu es obligé pour l'update, il faut laisser "Eval" et mettre dans le monFormview.itemUpdating :
e.NewValues("monchamp") =MadropDownList.selectedValue
tu n'esdonc pas obligé de laisser "Bind"
D'autrePart, tu sais sans doute que la valeur de l'item d'un dropdownList, n'est pas forcément la même que le texte affiché.
J'ai essayer de plusieurs façon d'utiliser l'expression-test, mais il me sors toujours la même erreur..
"Le format de la chaîne d'entrée est incorrect."
J'ai abandonné l'utilisation du FormView pour ce que je veux faire. Je galère avec ca.
J'utilise la méthode la plus simple, aucun contrôle Data. J'utilise juste mes Textbox et DropDownList dans ma page et je fais tout le reste par code champ par champ, textbox par textbox. Mais le même problème se pose.
Exemple : tbNom.Text = myReader("nom")
Tout va bien, sauf quand de nouveau quand mon champ nom (en nvarchar) dans SQL Server est vide. Je voudrais éviter de mettre une valeur par défaut dans SQL Server pour résoudre ce souci car j'ai beaucoup trop de champs. J'ai une centaine de Textbox à binder.
Voici l'erreur :
La conversion du type 'DBNull' en type 'String' n'est pas valide.
Description : Une exception non gérée s'est produite au moment de l'exécution de la demande Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.
Que faut il faire pour vérifier d'abord si myReader("nom") est DBNull ou pas ?
J'avais mis au départ tout mes myReader entre le blog Try/Catch, mais le souci c'est que dès qu'il tombait sur un champ qui était DBNull, il ne remplissait pas mes Textbox d'après. Il arrêtait le processus.
J'essaye de trouver une solution au plus simple car comme j'ai dis plus haut, j'ai une centaine de textbox de données à remplir. Le plus simple serait sûrement de faire une fonction du genre TestDBNull(myReader("nom")) qui vérifie d'abord si mon reader nom est DBNull ?