IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Stopper / relancer une boucle en C# (pour lecture ASPX)


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Par défaut Stopper / relancer une boucle en C# (pour lecture ASPX)
    Bonsoir,

    C'est mon premier post sur ce forum, j'espère ne pas m'être trompé d'endroit pour poster ma question. Je vous explique en quelques mots : j'essaye d'afficher sur une carte d'angleterre les icônes de temps renvoyées par un service pour un nombre de stations météo fixé.
    Pour ce faire j'utilise une ArrayList préalablement remplies dans ma partie C# (CodeBehind="SRB.aspx.cs") avec des objets de type Weather contenant plusieurs string d'information météo. Cette ArrayList fonctionne correctement et me renvois bien toutes les informations météo dont j'ai besoin.
    Le problème intervient simplement lorsque j'essaye de faire fonctionner une boucle FOR dans mon code ASP afin de positionner toutes les stations météo sur ma carte.

    Ci-dessous l'initialisation avec l'appel à google map pour afficher une carte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        var map;
     
     
        function initialize() 
        {
     
            if (GBrowserIsCompatible()) 
            {
                map = new GMap2(document.getElementById("map_canvas"));
                map.setCenter(new GLatLng(55.18, -2.3), 5);
                map.addControl(new GOverviewMapControl());
                map.setUIToDefault();
    Ensuite vient la boucle For qui me pose problème, c'est simplement une question de synthaxe probablement, pour l'instant si je remplace le "i" par le chiffre d'un index contenu dans la liste, cela marche sans problème. J'ai l'impression que la boucle "for" ne fonctionne simplement pas. L'erreur renvoyé pour le moment est "The name 'i' does not exist in the current context".

    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
                    var i=0;
                    for (i = 0; i <= "<%=Weatherdecod.Count %>" - 1; i++) //Weatherdecod est mon ArrayList, en mode débug je peux y voir les objets météo qu'elle contient.
                    {
     
                        var tempo = new GLatLng(<%=((ScottishRainBird._Default.Weather)Weatherdecod[i]).latit %>,<%=((ScottishRainBird._Default.Weather)Weatherdecod[i]).longit %>); //<%=((ScottishRainBird._Default.Weather)Weatherdecod[i]).latit %> et <%=((ScottishRainBird._Default.Weather)Weatherdecod[i]).longit %> sont les coordonnées de la sation concernée (latitude, longitude), lorsque je remplace le "i" par une valeur d'index (0, 1, 2, 3, ..... etc) j'arrive à visulaliser la sation sur ma carte
                        var weatherIcon = new GIcon(G_DEFAULT_ICON);  //weatherIcon est la gestion de l'icône météo, tout cela fonctionne sans problème sur un autre projet avec 3 stations météo statiques.
                        weatherIcon.image = "<%=((ScottishRainBird._Default.Weather)Weatherdecod[i]).icon %>"; //<%=((ScottishRainBird._Default.Weather)Weatherdecod[i]).icon %> fait référence à l'icône météo relative à l'objet "i" que je souhaite afficher.
                        weatherIcon.shadow = null;
                        weatherIcon.iconSize = new GSize(32, 32);
                        weatherIcon.iconAnchor = new GPoint(35, 16);
                        var markertempo = new GMarker(tempo, { icon: weatherIcon, } );
                        map.addOverlay(markertempo); //demande d'affichage de l'icône de temps
                    }
            } 
        }
    Merci d'avoir pris la peine de lire jusqu'au bout et merci pour toute réponse constructive.

    Jimmy

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Par défaut
    mouai bizarre, remplace ça et dis moi ce qui se passe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var i=0;
                    for (i = 0; i <= "<%=Weatherdecod.Count %>" - 1; i++)
    Par ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var count = '<%=Weatherdecod.Count %>';
    alert(count); // Tu me diras si ça marche pas ce qui a dans count ;-)
                    for (var i = 0; i < count; i++)
    Tu me diras si ça marche pas ce qui a dans count ;-)
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Par défaut
    Justement je viens d'essayer de me faire renvoyer une alerte autant de fois qu'il y a de stations dans ma liste avec le nom de la première station et ça marche, cf le code si dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                    var i = 0;
                    for (i; i <= "<%=Weatherdecod.Count %>"; i++)   // il y a 33 stations dans ma liste Weatherdecod
                    {
                        alert("<%=((ScottishRainBird._Default.Weather)Weatherdecod[1]).city %>"); // .city renvois le nom de la station "1" ici, c'est ça qui bug quand je le remplace par "i"
                    }
    En tout cas merci rad_hass pour ton attention
    J'ai l'impression que c'est une erreur toute bête...mais j'ai du mal à trouver.

  4. #4
    Candidat au Club
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Par défaut
    Donc d'après le test que j'ai fait avec l'alerte hier, il s'avère que le problème ne vient pas de la boucle FOR mais de l'index de mon ArrayList Weatherdecod[i]. J'ai besoin d'utiliser cette liste pour afficher 1 à 1 tous les objets qu'elle contient. Comme je ne suis pas très avancé en programmation C#, ça doit être tout simplement une erreur bête...

    Merci d'avance pour toute aide constructive.

    PS : En cherchant un peu plus j'ai trouvé que le "i" dans Weatherdecod[i] est en fait utilisable côté C#. En gros si je déclare le i ( public int i; ) il prend "i" à 0 en valeur par défaut et m'affiche la station numéro "0"...de plus je peux changer "i" = X pour afficher l'une des 33 stations. En gros maintenant la question est : Est-il possible de récupérer une valeur de "i" (incrémenté en C#) à la fin d'une boucle dans mon ASPX ? Ou d'arrêter régulièrement la boucle C# pour permettre à l'ASPX d'aller la lire

    Voici mon code C# utilisé :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
        public partial class _Default : System.Web.UI.Page
        {
     
            private ScottishRainBird.TSBWeatherWS.ServiceSoapClient Service;
     
            public ArrayList Weatherglobal = new ArrayList();
            public ArrayList Weatherdecod = new ArrayList();
            public string coordinate; //coordonnées du centre et des coins pour connaître le zoom.
            public int i=0;
     
            public struct Weather //un objet est composé des données qui suivent (je vous fait grâce des 15 info).
            {
                public string city;
                public string latit;
                public string longit;
                public string icon;
                public string temper;
                public string humid;
     
            }
     
            protected void Page_Load(object sender, EventArgs e)
            {
                Service = new ScottishRainBird.TSBWeatherWS.ServiceSoapClient(); //appel du service météo
                ArrayList list = new ArrayList();
                ArrayList local = new ArrayList();
     
     
                coordinate = "(54.85131525968609, -2.021484375)(60.69469537287745, 19.951171875)(48.01932418480118, -23.994140625)"; //initialisation des coordonnées, à l'avenir cette ligne n'existera plus
                list.AddRange(GenerateString(coordinate)); //découpe des infos envoyés par le service afin de créer les objets. 
                Weatherglobal.AddRange(Service.getNearbyStationDataInArrayListWithCoordinates(Math.Round((double)list[0],2), (Math.Round((double)list[1],2)), Math.Round((double)list[2],2), Math.Round((double)list[3],2), Math.Round((double)list[4],2), Math.Round((double)list[5],2), 15, 15)); //utilisation des coordonnées, latitude longitude du centre et de 2 coins de la carte
     
                foreach (string weatherdata in Weatherglobal)  //boucle de création des 33 objets de la liste qui contiennent chacun les info ci dessous.
                {
                    Weather tempor = new Weather();
                    list.Clear(); //nettoyage de la liste entre chaque création d'objet
                    list.AddRange(convertString(weatherdata));
     
                    tempor.city = ((string)list[1]);
                    tempor.latit = ((string)list[2]);
                    tempor.longit = ((string)list[3]);
                    tempor.icon = ((string)list[4]);
                    tempor.temper = ((string)list[5]);
                    tempor.humid = ((string)list[6]);
     
     
                    Weatherdecod.Add(tempor); // ajout de l'objet créé dans mon ArrayList Weatherdecod
                    i++; //implémentation du "i" pour le moment cela ne me renvois que la dernière valeur de "i"
                 }

Discussions similaires

  1. sortir d'une boucle et reprendre pour la ligne suivante
    Par gueridonbis dans le forum PL/SQL
    Réponses: 4
    Dernier message: 21/07/2009, 22h06
  2. Relancer une boucle cadencée
    Par kobalt02 dans le forum LabVIEW
    Réponses: 7
    Dernier message: 21/07/2009, 15h42
  3. [LabView 7.0] Relancer une boucle toutes les X secondes
    Par mateo2486 dans le forum LabVIEW
    Réponses: 1
    Dernier message: 04/09/2007, 11h27
  4. créer une boucle d'attente pour de l'ajax
    Par Ceubex dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/08/2007, 22h46
  5. Réponses: 2
    Dernier message: 01/08/2005, 16h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo