adressprov
Messages postés62Date d'inscriptionmercredi 21 juin 2006StatutMembreDernière intervention24 mars 2007
-
21 juil. 2006 à 17:29
adressprov
Messages postés62Date d'inscriptionmercredi 21 juin 2006StatutMembreDernière intervention24 mars 2007
-
26 juil. 2006 à 11:45
Bon, je sais je suis chiant mais je suis sur que je ne suis pas le seul. (lol) :-)
J'explique mon nouveau problème et là je suis sur que cela porte sur du code.
Voila dans une première page j'ai une ListBox dans laquelle se trouve
plusieurs personnes. Cette ListBox à la propriété multiple donc
l'utilisateur peut choisir plusieurs personnes.
Donc l'utilisateur choisit des personnes et clique sur un bouton qui va
l'envoyer sur une autre page et qui va mettre dans un ArrayListe de
type static (déjà la je suis par sur que sa soit bien) toutes les
personnes sélectionnés.
Lors du chargement de la seconde page, je dois remplir un datagrid avec
toutes les personnes choisies et d'autres informations les concernant
donc je fais une boucle Pour pour savoir combien de personnes ont été
selectionné puis dans cette boucle je fais ma connexion avec la base de
données pour chaques personnes puis je remplis par DataGrid mais
celle-ci ne m'affiche que la dernière personne.
Un exemple vaut mieux qu'un grand discours voici une partie de mon code :
if(!IsPostBack) {
for (i=0;i<=WebApplication1.WebForm3.myListBoxSelectVal.Count;i++) {
//S'il y a une erreur lors de la connexion ou de l'identification, je renvoie false
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 21 juil. 2006 à 23:41
Bonsoir,
c'est normal ce qui t'arrive ! Tu binds tes controles plusieurs fois de suite et logiquement c'est la derniere valeur qui est affiché ... :-/
et non ce n'est pas bien de mettre des données propres à un user dans une variable static qui est propre à l'application donc plusieurs users partagent la meme valeure :s les variables sessions sont tes amis :)
adressprov
Messages postés62Date d'inscriptionmercredi 21 juin 2006StatutMembreDernière intervention24 mars 2007 22 juil. 2006 à 02:06
Comment résoudre mon premier problème alors pour ne pas binder à chaque fois car je suis obligé de faire une requête pour chaques personnes selectionné par l'utilisateur.
En ce qui concerne la variable static, je vais créer une variable de sessions qui vaa donc contenir toutes les personnes selectionnées.
cs_Yopyop
Messages postés586Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 février 20101 23 juil. 2006 à 18:02
salut,
je te suggère de mettre l'id des personnes dans ta liste (vluae=id, text = nom + prénom).
ensuite, sur ta page qui affiche tes personnes sélectionnées, tu récupères les ids et tu crées une requête du genre:
select * from personne where id in (" + idReceived "+) Order by nom ASC"
adressprov
Messages postés62Date d'inscriptionmercredi 21 juin 2006StatutMembreDernière intervention24 mars 2007 24 juil. 2006 à 10:22
Ok, j'ai voulu essayé mais je sais pas comment on fait pour mettre l'id
des personnes dans ta liste (value=id, text = nom + prénom) dans le
code behind
Car pour remplir ma liste je fais
foreach (DataRow dr in monDataSet.Tables[0].Rows)
{
LBCom.Items.Add(dr["Nom"].ToString());
}
Et je ne suis pas sûr que idReceived marche puisque sa va être un
ArrayList, la requête ne va pas lire toutes les cases de mon ArrayList
et voir si cela correspond au id de la personne.
adressprov
Messages postés62Date d'inscriptionmercredi 21 juin 2006StatutMembreDernière intervention24 mars 2007 24 juil. 2006 à 13:08
Ok, j'ai remplacé mon code
foreach (DataRow dr in monDataSet.Tables[0].Rows)
{
LBCom.Items.Add(dr["Nom"].ToString());
}
par
LBCom.DataValueField = "CodePerso";
LBCom.DataTextField = "Nom";
LBCom.DataBind();
Mais dans le code de l'autre page ou j'envoi l'utilisateur, je récupère
mes commerciaux selectionnés grâce à la variable de session
préalablement remplit
ArrayList ComSel = (ArrayList)Session["ComSel"];
Mais je peux pas faire ma requête comme sa
string querytest = "SELECT CodePerso, Nom, Prenom From Commercial where CodePerso in ('" + ComSel +"')";
Car sinon il ne voit pas les valeurs de mon ArrayList mais plutot sa : "System.Collections.ArrayList".
Et c'est la le problème, il faut que je lui indique dans quel case il
doit aller et pour cela j'utilise une boucle for ce qui efface donc les
valeurs à l'intérieur de mon DataGrid et donc à l'affichage il me reste
plus que la dernière personne selectionné par l'utilisateur.
cs_Yopyop
Messages postés586Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 février 20101 24 juil. 2006 à 19:29
re,
qu'est ce que tu mets exactement dans ta variable session ComSel?
normalement tu devrais y mettre une liste d'id (la liste des codeperso selectionnés).
ensuite tu fais un truc du genre (ps, il vaut mieux utiliser un stringbuilder):
Dim sListIds as string=""
'contruire une string de la fome 12,15,554,67 = listes des ids selectionnées, séparées par une virgule
for each id as string in ComSel
slistids=slistids & id & ","
next
string querytest = "SELECT CodePerso, Nom, Prenom From Commercial where CodePerso in (" + slistids +")
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 24 juil. 2006 à 20:01
Si c'est un tableau de string on peut aussi le mettre dans la variable session puis faire un join(",") dessus ca évite en plus de devoir supprimer la derniere virgule de la concaténation ;-)
adressprov
Messages postés62Date d'inscriptionmercredi 21 juin 2006StatutMembreDernière intervention24 mars 2007 25 juil. 2006 à 10:13
Dans ma variable session, je mets mon ArrayList (c'est peu être pas une
bonne solution, je sais pas). A la limite je peux changer mon ArrayList
pour un tableau de int ou de string car au final sa sera des int
puisque c'est des identifiants. Et puis il n'y a aucune utilité d'avoir
un ArrayList ici :-)
Après reste à savoir si je peux utiliser un join sur le tableau de int.
En tout cas, merci pour vos réponses
Juste une autre petite question comme savoir si ma requête ne renvoie
rien. Cela est-il possible de le savoir avant de remplir mon dataset ?
Est-il possible de faire une requete de type select sur un dataset car
cela m'éviterait de faire à chaque fois une connexion à la base de
données car cette appel se trouve dans deux boucles pour imbriquée et
je trouve que le temps pour exécuter mon code est largement trop long.
cs_Yopyop
Messages postés586Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 février 20101 25 juil. 2006 à 11:06
re,
pour les select sur un dataset, regarde la méthode Filter ou Select (si je me souviens bien, ces méthodes te renvoient un tableau de datarows, tu peux les utiliser pour re-remplir un dataset et le binder à tes contrôles...reste à savoir si cela est vraiment plus rapide que de refaire une requête...).
adressprov
Messages postés62Date d'inscriptionmercredi 21 juin 2006StatutMembreDernière intervention24 mars 2007 25 juil. 2006 à 16:01
Donc je suis obligé de faire remplir mon dataset.
Parce que je sais pas pourquoi mais ma page met 30 seconde avant de s'afficher et je trouve ce délai carrément trop élevé.
En fait, sur ce bout de code je crée un tableau html
dynamiquement pour cela j'utilise deux boucles for, une pour les lignes
et une pour les colonnes.
Lors de ces boucles for imbriquée je fais ma requête et je crois que
c'est là le problème c'est que sa fait au moinsdeux cents appel à la
base de données.
Mais dès fois la requête ne renvoie rien c'est pour sa j'aurais voulu réduire le temps de chargement.
Voici un bout de mon code :
for (ligne = 0;ligne<=7;ligne++) {
HtmlTableRow Maligne = new HtmlTableRow();
for (colonne = 0;colonne<=34;colonne++) {
HtmlTableCell MaCase = new HtmlTableCell();
try {
maConnexion = new
OleDbConnection (@"Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=""E:\Temp\JF\Maquette
asp\RDV.mdb""");
maConnexion.Open();
string querytest = "SELECT
H_deb_RDV,H_fin_RDV,CodePerso FROM Planning where Date_RDV = " +
adressprov
Messages postés62Date d'inscriptionmercredi 21 juin 2006StatutMembreDernière intervention24 mars 2007 25 juil. 2006 à 18:05
En fait, les lignes sont les jours comme tu le dis et les colonnes sont les intervalles horaires.
Le but de ce bout de code est de faire un petit planning de
visualisation multipersonne. En fait, chaque personne se vera attribuer
une couleur que j'afficherais si la personne à un rendez-vous sur la
plage horaire ou je me trouve.
C'est pour sa que je suis obligé de faire mes requêtes dans deux boucles pour imbriquées.