amorosalain
Messages postés52Date d'inscriptionjeudi 1 janvier 2004StatutMembreDernière intervention22 juillet 2008
-
17 déc. 2004 à 11:38
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 2010
-
19 déc. 2004 à 16:32
SAM
Dans ma page asp.net, j'ai une CheckBoxList que je remplis à l'aide d'information d'une base de données.
Je souhaites rendre disabled certaine case à cocher de la liste (en fonction de certaines conditions).
Pour une CheckBox, il existe une propriété Enabled qui remplit ce rôle mais pour les ListItem qui remplisse une CheckBoxList, cette propriété n'existe pas.
J'ai voulu utiliser la propriété Attributes :
CheckBoxList F_list;
F_list.Attributes.Add("key","valeur");
mais elle nécessite une clé et une valeur alors que "disabled" qui est valide dans une balise html n'a pas de valeur.
A noter qu'il est bien sur possible d'utiliser un tableau de CheckBox, (CheckBox[]) que l'on insère dans une table par exemple mais ... si il existe une solution avec une CheckBoxList, je la préfère.
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 17 déc. 2004 à 15:59
Je suis pas sur de tomber dans le mil a ta question.
Mais c'est une aberration !!! il ne faut pas utiliser ceci !!! certes ca passe, mais les standard du web etablit par le W3C ne l'acceptent pas! il faut passer par un
c'est assez choquant au debut, mais une fois bien reflechie, ca peut paraitre logique et on peut meme aller jusqu'a dire que ca simplifie pas mal de chose.
pour revenir a ton problème je pense pas que cela va arranger grand chose d'ajouter un attribut à la liste, je ne pense pas que cela va te mettre le disabled="disabled" sur chaque checbox. la solution serait alors de faire quelque chose du genre :
Private Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.PreRender
For Each c As CheckBox In cbl.Controls
If "ta" = "condition" Then
c.Enabled = False
End If
Next
End Sub
ou cbl et ton checkboxlist, mais j'aime pas trop cette solution, et je suis pas sur non plus que ca marche, normalement oui :)
amorosalain
Messages postés52Date d'inscriptionjeudi 1 janvier 2004StatutMembreDernière intervention22 juillet 2008 17 déc. 2004 à 17:49
SAM
C'était une bonne idée mais la tous les checkbox de la checkboxlist deviennent enabled ou pas tous ensemble, selon la valeur du premier élément.
La solution machkboxlist.Items[i].Attributes.Add("disabled","disabled") ne fonctionne pas non plus. rien n'est inséré.
Je pense que la seule solution est de passer par un tableau de CheckBox, qui remplace la CheckBoxList.
Chaque CheckBox du tableau peut alors être manipulé indépendament des autres.
amorosalain
Messages postés52Date d'inscriptionjeudi 1 janvier 2004StatutMembreDernière intervention22 juillet 2008 17 déc. 2004 à 21:25
SAM
Oui justement, c'est ta méthode que j'ai essayé.
Si tu met le premier à Enabled = true alors tous les CheckBox de la liste sont Enabled même si tu en mets à false.
Idem dans le sens contraire, si le premier est à false, ils sont tous à false.
int i=0;
foreach (CheckBox chk in MaCheckBoxList.Controls)
{
if (i==0)
chk.Enabled = true;
else
chk.Enabled = false; // ne sert à rien, ils seront tous à true
i = i + 1;
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 17 déc. 2004 à 21:50
c pas le meme controle que tu changes ?
tu as VS.net ? Regarde en mode debug et pas à pas ce que ca te fais. et dis mois aussi MaCheckBoxList.Controls.count et verfifie si c'est pas les memes
chk.text, ca me semble bizarre.
sinon tu peux me donner comment tu lies ta liste a ta source de données ?
et tu as placé ce code dans quels evenement ?
dans le page_load, le prerender ? essaye plusieurs endroits ... le prerender me semble bien :) ou alors le databinding
la je vois plus trop ou est le problème, si tout ce que je t'ai dit n'a rien changé, je regarderais ce soir avec VS.net :big)
amorosalain
Messages postés52Date d'inscriptionjeudi 1 janvier 2004StatutMembreDernière intervention22 juillet 2008 18 déc. 2004 à 12:54
SAM
Oui, tu as raison. En faites, ma CheckBoxList est remplit avec des ListItem dans ma page aspx.
En traçant le programme, j'obtient les valeurs suivantes :
F_config.Controls.Count = 1 alors que
F_config.Items.Count = 5 (bon nombre);
J'ai besoin du Value qui me sert ensuite à faire mes tests en fonction d'un choix utilisateur et rendre enabled ou non le checkbox. C'est dans un evênement lié à un click sur un bouton.
Il faudrait que je remplisse la CheckBoxList avec des CheckBox au lieu de ListItem. Les CheckBox n'ont pas de propriété Value mais je peux me servir de la propriété ID (à voir).
Le tableau de CheckBox (CheckBox[ ]) ne me convient pas trop car les Value doivent être inséré dans la page aspx et non via le code. Je pourrais mettre un pour faire un split et construire dynamiquement ma liste de CheckBox mais si il y a une solution via la CheckBoxList, c toujours bon à savoir.
Je vais faire quelques recherches et je laisserais un message si je trouves une solution.
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 18 déc. 2004 à 14:49
Je prendrais VS quand j'aurais le temps pour clore le programme, car tout ca me semble bizarre !
je suis pas sur de t'avoir compris. tu le met dans le click ? tu peux m'expliquer à quoi te sert ta list, tu ajoutes ta liste au click, ou alors tu modifies tes checkbox au click ?
Je viens de regarder : ce code la n'est peut etre pas vraiment valide :
int i=0;
foreach (CheckBox chk in MaCheckBoxList.Controls)
{
if (i==0)
chk.Enabled = true;
else
chk.Enabled = false; // ne sert à rien, ils seront tous à true
i = i + 1;
}
Le type de Check pose peut etre problème essaye plutot comme ca
foreach (Controls chk in MaCheckBoxList.Controls) puis regarde dans le debug le type de chk : chk.gettype et parse ton controle avec ce type : surement ca
(listitem)chk.enabled
ou (checkbox)chk.enabled
et puisqu'apparement tu n'as qu'un controle dans cbl.controls, je pense qu'il doit s'agir d'une table, et quand tu la met enabled, tout les enfants seront enabled, verifie le type de l'unique control grace au debug
essaye alors comme ca :
foreach (Controls chk in MaCheckBoxList.Items)
amorosalain
Messages postés52Date d'inscriptionjeudi 1 janvier 2004StatutMembreDernière intervention22 juillet 2008 19 déc. 2004 à 14:03
SAM
Dans ma page, j'ai plusieurs LinkButton associé à des éléments. Ma CheckBoxList me sert à associer des valeurs à ces éléments. Un élément peut donc être associé à zéro, un ou plusieurs valeurs.
Les valeurs sont transmises dans les propriété Value des ListItem qui servent à remplir la CheckBoxList dans la page.
valeur 1
etc...
Certaine valeurs sont déjà associété et dans l'evenement lié au click sur un LinkButton, je veux donc rendre enabled = false plusieurs CheckBox de la CheckBoxList.
Le problème est qu'une CheckBoxList est remplit avec des ListItem et qu'un ListItem n'a pas de propriété Enabled. Il n'y a pas non plus de lien entre CheckBox et ListItem.
foreach(Controls chk in F_config.Items)
{
((CheckBox)chk).Enabled = false; // envoi une exception cast non valide
}
Ce qui est bizarre, c que le nombre de ListItem est le nombre de CheckBox dans la liste mais le nombre de Controls (Controls.Count) est égal à 1.
Si j'affiche sont type (chk.GetType().ToString()), il est du type CheckBox. La propriété Enabled de ce control mise à true ou false est appliqué sur tous les CheckBox de la liste. C'est effectivement bizarre.
Te prends pas trop la tête sur mon problème surtout que j'ai une solution de rechange. J'utiliserais un input type="hidden" pour envoyer mes valeurs en paramètres à la classe d ema page et je remplirais un tableau de CheckBox. Ils seront indépendant et je pourrais mettre Enabled = true/false selon ma condition.
(A moins que tu ais envie de trouver la solution avec un CheckBoxList).
Pour moi, la CheckBoxList n'est pas faite pour traiter les CheckBox indépendament les uns des autres !!!
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 19 déc. 2004 à 16:32
OK j'ai enfin pris le temps d'ouvrir VS.net et de regarder ca :)
donc le problème vient qu'un listitem n'est pas un control !!! et oui ce truc la n'hérites pas d'objet, c'est pour ca que controls.count = 1. j'aime pas trop les checkboxlist, mais maintenant je sais pourquoi :)
donc pour modifier un item, va falloir tout faire à la main, rechercher le control et ajouter ce qu'on veut dedans. On peut soit le faire directement en asp.net soit en javascript, la solution coté serveur est preferable, mais j'y avais pas pensé au debut, donc je me suis lancé rapidement dans un bout de script javascript :
voice ce que j'ai fait :
Dim i As Integer = 0
For Each c As ListItem In F_config.Items
Literal1.Text &= c.Text & " - " & F_config.UniqueID & "_" & i.ToString & "
"
Literal1.Text &= "<script language=""javascript""><!--" & vbNewLine & "document.getElementById(""" & F_config.UniqueID & "_" & i.ToString & """).setAttribute(""disabled"", ""disabled"") " & vbNewLine & "-->" & vbNewLine & "</script>"
i += 1
Next
j'ai fait ca vite fait, mais si tu utilises javascript, tu as quand meme interet à travailler un peu le javascript, enregistrer une fonction via page.startupregisterscript qui demande un tableau en paramètre et dans la boucle for, tu ajoutes tes elements dans un tableau javascript et tu appelles ta fonction js avec ce tableau :)
mais mieux vaut faire ca coté serveur ce sera moins lourd