Creation dynamique de boutons radio associé à une base de données

SaiYan5102 Messages postés 69 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 15 mars 2011 - 21 déc. 2009 à 13:43
SaiYan5102 Messages postés 69 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 15 mars 2011 - 23 déc. 2009 à 14:57
Bonjour,

Pour être le plus clair possible je vous montre directement ce que je produis, voici ma page :

http://img189.imageshack.us/i/adminqu.jpg/

Dans les colonnes Valider et Refuser du premier tableau je souhaite insérer des checkbox et dans les colonnes Disponible et Indisponible du second tableau je souhaites inserer des boutons radio.

Comme mes lignes de tableaux sont créer en fonction du nombre de résultats à afficher je souhaite créer ces contrôles dynamiquement dans mon code C# (la page est en ASP/C#). Le hic c'est que chaque bouton créer doit avoir un nom unique et pour faire ca dynamiquement je ne vois pas. (RadioButton bouton+i = new RadioButton(); ne fontionnant évidemment pas).

Donc ma premiere question est comment créer tout ces contrôles dynamiquement ?

voici le code de mon second tableau :

_command.CommandText "SELECT PRM_libelle, PRM_code FROM appli_prm WHERE (PRM_pervalid1 '" + Matricule + "' OR PRM_Pervalid2 = '" + Matricule + "' OR PRM_Pervalid3 = '" + Matricule + "') ORDER BY PRM_code, PRM_libelle ASC";
                    reader = _command.ExecuteReader();

                    Label label2 = new Label();
                    PanelCorpsRessources.Controls.Add(label2);
                    label2.Text = " Nom  |TypeDisponible |Indisponible\";

int i  = 1;

while (reader.Read())
{
string ressource = reader.GetString(0);
string typeRessource = reader.GetString(1);

label2.Text += \"----
" + ressource + ", \" + typeRessource + \"" + ", \";
}

                    label2.Text += "
";

                    reader.Close();


Ma deuxième question est comment associer les contrôles aux lignes concernées de ma bdd ? Par exemple si l'utilisateur sélectionne indisponible pour la ressource JUMPY que ca aille modifier la valeur de la colonne disponible dans ma table des ressources.

27 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
23 déc. 2009 à 13:59
Tout d'abord, je te conseille de mettre la partie Update avant la partie Reader. Comme ça, lorsque tu liras la base, elle sera à jour.

Ensuite, sans un _command.ExecuteNonQuery(); dans la boucle, ça ne risque pas de marcher.

Et mon <> n'était PAS un erreur. Cela évitait de modifier une entrée pour lui redonner la même valeur. Je traduis ma requête SQL :
"Tu modifies le champ qui à cet identifiant en lui donnant la nouvelle valeur, s'il n'avait pas déjà cette nouvelle valeur. "
=
"Tu modifies (UPDATE) tous les champs de la table (appli_prm) qui ont cet identifiant et pas cette valeur (WHERE PRM-numero=@id AND PRM_procedure<>@etat) en leur mettant la nouvelle valeur (SET PRM_procedure=@etat)".

A l'heure actuelle, ta requête ne sert à rien, puisque tu ne l'exécute que si l'entrée avait déjà la nouvelle valeur.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé ! -
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
23 déc. 2009 à 14:01
Ah, et autre chose : soit tu crées un nouveau SqlCommand à chaque itération de ta boucle, soit je te conseille de vider les paramètres en début d'itération : _command.Parameters.Clear();

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé ! -
0
SaiYan5102 Messages postés 69 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 15 mars 2011 1
23 déc. 2009 à 14:11
Au temps pour moi, je ne connaissais pas ce "<>", pratique.
Pour l'ordre, avant la partie reader c'est à dire à quel niveau stp ?

Là j'ai un soucis avec les paramètres dans la boucle. J'obtiens cette erreur lorsque je valide mon formulaire :
The variable name '@etat' has already been declared. Variable names must be unique within a query batch or stored procedure.
0
SaiYan5102 Messages postés 69 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 15 mars 2011 1
23 déc. 2009 à 14:13
Ca fonctionne :) ok pour le _command.Parameters.Clear(); Me reste plus qu'a mettre dans le bon ordre comme tu as dis !?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SaiYan5102 Messages postés 69 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 15 mars 2011 1
23 déc. 2009 à 14:30
Je m'embrouille un peu avec le reader. Si je mets mon bloque if, pour faire l'UPDATE, avant ma boucle while ca ne va pas.
Je dois dispositionner ca comment exacetement pour que j'ai ma bdd à jour quand je lis la page ?

C'est ma dernière question, après je vais faire pareil sur mon deuxième tableau et ce sera bon pour cette page.
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
23 déc. 2009 à 14:44
Tu mets tout ton bloc if(Request.Form[.... TOUT EN HAUT de ton code (avant le _command.CommandText = "SELECT

Mais c'est pour cette raison qu'il vaut mieux utiliser des SqlCommand différents (un pour l'écriture - un pour la lecture, voire un pour chaque update et un pour l'écriture), pour ne pas t'embrouiller.

En gros c'est censé être à peu près comme ça :

- Ouverture de la connexion à la BDD
- On regarde s'il y a des actions à faire (c'est le cas quand tu valides ton formulaire (puisque tu veux mettre à jour ta base de données selon les radio)
- On effectue ces actions
- On génère la page (donc c'est là que tu utilises ton reader, ton code HTML généré...)
- On ferme la connexion à la BDD

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé ! -
0
SaiYan5102 Messages postés 69 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 15 mars 2011 1
23 déc. 2009 à 14:57
Évidemment j'avais mis ca en dessous de _command = "SELECT...", surement un peu trop pressé de finir cette journée du 23 décembre.

Ca fonctionne très bien comme ca apparemment.

Je me suis avancé un peu toute à l'heure, il va me rester à vérifier si la ressource passe de dispo à indispo, regarder si elle était réservée et si c'est le cas envoyer un mail à la personne concernée et supprimer la réservation. Mais tu m'as assez aider comme ça et je t'en remercie, je vais essayer de faire ça moi-même et vraiment si je bute je viendrais demander ton aide.

Encore merci et bonnes fêtes de fin d'année à toi.
0
Rejoignez-nous