none
consommation d'un web service en PhP et sur un serveur apache avec windows phone ??? RRS feed

Réponses

  • Oui c'est de ma faute j'ai fait une erreur dans le code dans le switch, je ne réinstancie pas l'objet, voici le code c# dans son intégralité :

    // Constructeur
        public MainPage()
        {
          InitializeComponent();
          this.Loaded +=new RoutedEventHandler(MainPage_Loaded);
        }
    
        public class Article
        {
          public String Titre { get; set; }
          public decimal Prix { get; set; }
          public String Description { get; set; }
          public String UrlImage { get; set; }
        }
    
        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
          Uri url = new Uri("http://www.diva-software.com/temp/NourVoyages/export/liste.xml", UriKind.Absolute);
          WebClient client = new WebClient();
          client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
          client.DownloadStringAsync(url);
    
        }
    
        void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
          StringReader stream = new StringReader(e.Result);
          XmlReader reader = XmlReader.Create(stream);
    
          List<Article> articles = new List<Article>();
          Article article = null;
          while (reader.Read())
          {
            if (reader.IsStartElement())
            {
              switch (reader.Name)
              {
                case "title":
                  {
                    if (reader.Read())
                    {
                      
                      article = new Article();
                      article.Titre = reader.Value;
                    }
                  }
                  break;
                case "price":
                  {
                    if (reader.Read())
                    {
                      Int32 iPrix = 0;
                      Int32.TryParse(reader.Value, out iPrix);
                      article.Prix = iPrix;
                    }
                  }
                  break;
                case "short_description":
                  {
                    if (reader.Read())
                    {
                      article.Description = reader.Value;
                    }
                  }
                  break;
                case "image_url":
                  {
                    if (reader.Read())
                    {
                      article.UrlImage = reader.Value;
                      articles.Add(article);
                    }
                  }
                  break;
              }
            }
          }
          listbox1.ItemsSource = articles;
    
        }
    

     

     


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    mercredi 18 mai 2011 05:20
  • Bonjour,

    Ta solution est possible mais je préfère manipuler une List<T> plutôt qu'un tableau quand j'ai le choix.

    Je vais te montrer ma solution complète d'après ton exemple, donc je vais reprendre le code depuis le début et tu vas me dire si sa te convient.

    Je vais Poster en plusieurs morceaux pour permettre une meilleur visibilité.

    Voici le code Qu'il faut mettre Dans app.Xaml :

    <!--Application Resources-->
      <Application.Resources>
        <nav:UriMapper x:Key="UriMapper">
          <nav:UriMapper.UriMappings>
            <nav:UriMapping Uri="/" MappedUri="/MainPage.xaml" />
            <nav:UriMapping Uri="/Home/{Annonce}" MappedUri="/DetailPage.xaml?Annonce={Annonce}"/>
          </nav:UriMapper.UriMappings>
        </nav:UriMapper>
      </Application.Resources>
    

    Et voici le code qu'il faut mettre dans App.Xaml.Cs :

    /// <summary>
        /// Collection des articles valides pour toutes l'applications
        /// </summary>
        public static List<Article> Articles { get; set; }
    
        /// <summary>
        /// Constructor for the Application object.
        /// </summary>
        public App()
        {
          // Global handler for uncaught exceptions. 
          UnhandledException += Application_UnhandledException;
    
          // Show graphics profiling information while debugging.
          if (System.Diagnostics.Debugger.IsAttached)
          {
            // Display the current frame rate counters.
            Application.Current.Host.Settings.EnableFrameRateCounter = true;
    
            // Show the areas of the app that are being redrawn in each frame.
            //Application.Current.Host.Settings.EnableRedrawRegions = true;
    
            // Enable non-production analysis visualization mode, 
            // which shows areas of a page that are being GPU accelerated with a colored overlay.
            //Application.Current.Host.Settings.EnableCacheVisualization = true;
          }
    
          // Standard Silverlight initialization
          InitializeComponent();
    
          // Phone-specific initialization
          InitializePhoneApplication();
    
          this.RootFrame.UriMapper = Resources["UriMapper"] as UriMapper;
        }
    

     

     

     


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    samedi 21 mai 2011 08:37
  • Voici le Code de MainPage.Xaml :

    <!--ContentPanel - place additional content here-->
          <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <ListBox x:Name="listbox1">
              <ListBox.ItemTemplate>
                <DataTemplate>
                  <Grid Margin="0,10,0,10">
                    <Grid.ColumnDefinitions>
                      <ColumnDefinition Width="Auto"/>
                      <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                      <RowDefinition Height="Auto"/>
                      <RowDefinition Height="Auto"/>
                      <RowDefinition Height="Auto"/>
                      <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>
                    <TextBlock Text="Titre" Grid.Column="0" Grid.Row="0" Margin="0,0,10,0"/>
                  <TextBlock Text="Prix" Grid.Column="0" Grid.Row="1" Margin="0,0,10,0"/>
                  <TextBlock Text="Decsription" Grid.Column="0" Grid.Row="2" Margin="0,0,10,0"/>
                  <TextBlock Text="Url" Grid.Column="0" Grid.Row="3" Margin="0,0,10,0"/>
    
                    
                    <TextBlock Text="{Binding Titre}" Grid.Column="1" Grid.Row="0"/>
                    <TextBlock Text="{Binding Prix}" Grid.Column="1" Grid.Row="1"/>
                    <TextBlock Text="{Binding Description}" Grid.Column="1" Grid.Row="2" TextWrapping="Wrap" />
                  <Image Source="{Binding Thumbnail}" Grid.Column="1" Grid.Row="3" Width="96" HorizontalAlignment="Left" />
                  </Grid>
                </DataTemplate>
              </ListBox.ItemTemplate>
            </ListBox>
          </Grid>
    

     

    Voici le code de MainWindow.Xam.Cs + le code la classe Article :

    public partial class MainPage : PhoneApplicationPage
      {
        // Constructeur
        public MainPage()
        {
          InitializeComponent();
          this.Loaded += new RoutedEventHandler(MainPage_Loaded);
          this.listbox1.SelectionChanged += new SelectionChangedEventHandler(listbox1_SelectionChanged);
        }
    
        void listbox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
          //Le chiffre après home correspond à l'index de ton article dans la collection
          Uri u = new Uri("/Home/" + listbox1.SelectedIndex, UriKind.Relative);
          this.NavigationService.Navigate(u);
        }    
    
        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
          Uri url = new Uri("http://www.diva-software.com/temp/NourVoyages/export/liste.xml", UriKind.Absolute);
          WebClient client = new WebClient();
          client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
          client.DownloadStringAsync(url);
    
    
        }
    
        void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
          StringReader stream = new StringReader(e.Result);
          XmlReader reader = XmlReader.Create(stream);
          if (App.Articles == null)
            App.Articles = new List<Article>();
          App.Articles.Clear();
          Article article = null;
          while (reader.Read())
          {
            if (reader.IsStartElement())
            {
              switch (reader.Name)
              {
                case "id":
                  {
                    if (reader.Read())
                    {
    
                      article = new Article();
                      Int32 id = 0;
                      Int32.TryParse(reader.Value, out id);
                      article.Id = id;
                    }
                  }
                  break;
                case "title":
                  {
                    if (reader.Read())
                    {
    
                      article.Titre = reader.Value;
                    }
                  }
                  break;
                case "duration":
                  {
                    if (reader.Read())
                    {
    
                      article.Duree = reader.Value;
                    }
                  }
                  break;
                case "price":
                  {
                    if (reader.Read())
                    {
                      decimal iPrix = 0;
                      Decimal.TryParse(reader.Value, out iPrix);
                      article.Prix = iPrix;
                    }
                  }
                  break;
                case "short_description":
                  {
                    if (reader.Read())
                    {
                      article.Description = reader.Value;
                    }
                  }
                  break;
                case "long_description":
                  {
                    if (reader.Read())
                    {
                      article.DescriptionComplete = reader.Value;
                    }
                  }
                  break;
                case "thumbnail_url":
                  {
                    if (reader.Read())
                    {
                      article.Thumbnail = reader.Value;
                    }
                  }
                  break;
                case "image_url":
                  {
                    if (reader.Read())
                    {
                      article.UrlImage = reader.Value;
                      App.Articles.Add(article);
                    }
                  }
                  break;
              }
            }
          }
          listbox1.ItemsSource = App.Articles;
    
        }
    
    
      }
    
      public class Article
      {
        public Int32 Id { get; set; }
        public String Titre { get; set; }
        public String Duree { get; set; }
        public decimal Prix { get; set; }
        public String Description { get; set; }
        public String DescriptionComplete { get; set; }
        public String Thumbnail { get; set; }
        public String UrlImage { get; set; }
      }
    

     


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    samedi 21 mai 2011 08:39
  • Et pour finir voici le code de DetailPage.Xaml :

    <!--ContentPanel - place additional content here-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
          <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
          </Grid.ColumnDefinitions>
          <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
          </Grid.RowDefinitions>
          <TextBlock Text="Titre" Grid.Column="0" Grid.Row="0" Margin="0,0,10,0"/>
          <TextBlock Text="Durée" Grid.Column="0" Grid.Row="1" Margin="0,0,10,0"/>
          <TextBlock Text="Prix" Grid.Column="0" Grid.Row="2" Margin="0,0,10,0"/>
          <TextBlock Text="Description" Grid.Column="0" Grid.Row="3" Margin="0,0,10,0"/>
    
          <TextBlock Text="{Binding Titre}" Grid.Column="1" Grid.Row="0"/>
          <TextBlock Text="{Binding Duree}" Grid.Column="1" Grid.Row="1"/>
          <TextBlock Text="{Binding Prix}" Grid.Column="1" Grid.Row="2"/>
          <TextBlock Text="{Binding DescriptionComplete}" Grid.Column="1" Grid.Row="3" TextWrapping="Wrap" />
          <Image Source="{Binding Thumbnail}" Grid.Column="1" Grid.Row="4" HorizontalAlignment="Stretch" />
    
        </Grid>
    

    Et voic le code de detailPage.xaml.cs

    public partial class Page1 : PhoneApplicationPage
      {
        public Page1()
        {
          InitializeComponent();
        }
    
    
        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
          base.OnNavigatedTo(e);
          if (NavigationContext.QueryString.ContainsKey("Annonce"))
          {
            String iRangCollection = NavigationContext.QueryString["Annonce"];
            Int32 iIndex = 0;
            Int32.TryParse(iRangCollection, out iIndex);
            //On à récipérer l'index, on vérifie seulement si celui ci n'est pas supérieur au nombres 
            //d'articles dans la collection pour eviter une exception
            if (iIndex < App.Articles.Count)
            {
              this.DataContext = App.Articles[iIndex];
            }
          }
        }
      }
    

     

     


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    samedi 21 mai 2011 08:41

Toutes les réponses

  • Bonjour,

    Pouvez-vous nous expliquer pourquoi voulez-vous consommer votre WebService en PhP sur un autre type de serveur ? Vu que les forums MSDN sont pour les développeurs qui utilisent les technologies Microsoft, je ne crois pas qu’on peut vous aider. Je vous recommande à consulter cette page sur les services web PhP et peut être vous pouvez trouver une réponse.

    Cordialement,

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    mardi 10 mai 2011 13:56
  • Merci cripi pour la réponse ,moi aussi j'utilise les technologie Microsoft.Le problème est que mon patron ma demander d'effectuer une application deja existante sous i OS et android ...et je dois adapter celle de Windows Phone aux autres,,,on sait très bien que les web service sous WP7 sont réalisable avec la technologie wcf (généralement) alors que wcf n'est pas applicable pour les autres...

    tu comprend le probleme cripi!!!

    Cordialement Trabelsi Wahbi

    samedi 14 mai 2011 00:29
  • Je ne vois pas ou est le problème, que le webService soit en PHP ou WCF, qu'il attaque une base de donnée Oracle ou SqlServer.

    Ce WebService expose un contrat de donnée en Format XML normalement (le Wsdl) ?

    Donc normalement oui. Moi quand j'utilise un webService que je n'ai pas développer, je n'ai pas besoin de savoir en quel language il à été fait, ou sur quel type de serveur il tourne, etc.. J'ai juste besoin de savoir l'url du webService pour le référencer à mon projet.

     

     


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    samedi 14 mai 2011 06:33
  • Bonjour,

    Merci, Pascal, pour ta réponse.

     

    Je crois que pour les autres technologies (android, par exemple) il devrait être possible à référencer un WebService. Wahbi Trabelsi, pouvez-vous nous préciser si cette méthode fonctionne ou pas et si la réponse est négative, pouvez-vous nous donner plus des détails sur les restrictions que vous avez ? Merci !

     

    Cordialement,

    Cipri

     


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    lundi 16 mai 2011 09:14
  • Merci Pascal et Cripi 

    tout d'abord j'ai créé un web service qui collecte les données  a partir d'une BD sous sql server (je pense que cet méthode est applicable seulement pour WP7), après et avec l'aide de pascal j'ai utiliser la solution de récupération des données sous  format XML. cet dernière est satisfaisante  pour moi!!!

    Maintenant j'arrive a affiché  les données récupérer,mais l'affichage n'est pas convaincant (List box),je veux afficher le résultat d'un façon structuré

    -->Titre de l'annonce

    -->Image (miniature )

    -->short description

    --> Détails (lien cliquable qui nous mène a une autre page ou en trouve tout les détails de l'offre ) .

     

    j'ai essayer de parser l' XML  dans une page (pivot ou panorama) pour utiliser leur structure d'affichage,jusqu'a maintenant j'arrive pas a avoir de résultat .

    lundi 16 mai 2011 13:08
  • Bonjour,

     

    Votre webservice est de type svc , asmx ou autre ?

    Exemple : monService.svc

    Sinon avez vous un exemple de code ?


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    lundi 16 mai 2011 17:04
  • non pascal cet fois je récupère les données sans web service avec un lien (http:http://www.MonSite.com/temp/export/liste.xml) qui m'affiche cela:

     

    <root>
    <products>
    <product>
    <id>14</id>
    <title>Paris</title>
    <duration>10 J</duration>
    <price>1300</price>
    <short_description>Paris la plus belle ville du monde </short_description>
    <long_description>
    cjdcjmc hhhde deolh sdnlsd hsdl doldlol clsdlsl hllcdhjl lcl lc lncn lldlldl
    </long_description>
    <thumbnail_url>
    http://www.MonSite.com/temp/Voyages/upload/thmb4dd15444c069a.jpg
    </thumbnail_url>
    <image_url>
    http://www.Monsite.com/temp/Voyages/upload/img4dd15444c54b7.jpg
    </image_url>
    </product>
    </products>
    </root>
    
    lundi 16 mai 2011 17:52
  • supposons que nous avons plusieurs offres a afficher,je veux afficher d'une facon repetitive les informations:

    1. Titre
    2. Prix
    3. short description
    4. Image

    je pense que j'ai besoin d'une liste d'objet???

    Merci Pascal

    lundi 16 mai 2011 17:59
  • voila le code utiliser pour récupérer l'XML
     public MainPage()
        {
          InitializeComponent();
          SupportedOrientations = SupportedPageOrientation.Portrait | SupportedPageOrientation.Landscape;
    
    
          Uri url = new Uri("http://www.MonSite.com/temp/Voyages/export/liste.xml", UriKind.Absolute);
          WebClient client = new WebClient();
          client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
          client.DownloadStringAsync(url);
        }
    
        void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
          if (e.Error == null)
          {
            ListBoxItem areaItem = null;
    
    
            StringReader stream = new StringReader(e.Result);
            XmlReader reader = XmlReader.Create(stream);
            string imageName = String.Empty;
            string areaName = String.Empty;
            string fileName = String.Empty;
    
            while (reader.Read())
            {
              if (reader.NodeType == XmlNodeType.Element)
              {
                if ((reader.Name == "title"))
                {
                  
                  areaName=
    reader.ReadElementContentAsString();
                  
    
                  areaItem = new ListBoxItem();
                  areaItem.Content = areaName;
                  listBox1.Items.Add(areaItem);
                  
                }
    
    lundi 16 mai 2011 18:06
  • Voici un exemple :

    public class Article
        {
          public String Titre { get; set; }
          public decimal Prix { get; set; }
          public String Description { get; set; }
          public String UrlImage { get; set; }
        }
    
        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
          Uri url = new Uri("http://www.diva-software.com/temp/NourVoyages/export/liste.xml", UriKind.Absolute);
          WebClient client = new WebClient();
          client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
          client.DownloadStringAsync(url);      
    
        }
    
        void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
          StringReader stream = new StringReader(e.Result);
          XmlReader reader = XmlReader.Create(stream);
    
          List<Article> articles = new List<Article>();
          Article article = null;
          while (reader.Read())
          {
            if (reader.IsStartElement())
            {
              switch (reader.Name)
              {
                case "title":
                  {
                    if (reader.Read())
                    {
                      if (article == null)
                        article = new Article();
                      article.Titre = reader.Value;
                    }
                  }
                  break;
                case "price":
                  {
                    if (reader.Read())
                    {
                      Int32 iPrix = 0;
                      Int32.TryParse(reader.Value,out iPrix);
                      article.Prix =iPrix ;
                    }
                  }
                  break;
                case "short_description":
                  {
                    if (reader.Read())
                    {
                      article.Description = reader.Value;
                    }
                  }
                  break;
                case "image_url":
                  {
                    if (reader.Read())
                    {
                      article.UrlImage = reader.Value;
                      articles.Add(article);
                    }
                  }
                  break;
              }
            }
          }
        }
    

    Après il suffit juste d'ajouter la collection d'articles à ta ListBox.


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    lundi 16 mai 2011 18:56
  • juste problème d'ajout de la collection.
    lundi 16 mai 2011 20:44
  • salut Pascal

    c'est bon ,j'ai inséré le code! mais j'arrive pas a ajouter la collection d'article a la listbox, plutôt j'arrive pas a le faire!!

    du l'aide SVP,si c'est possible

    lundi 16 mai 2011 21:58
  • Bonjour il suffit juste d'ajouter la collection à l'itemsSource de la listBox et ce dréer un DataTemplate dans le xaml :

    listbox1.ItemsSource = articles;

     

    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
          <ListBox x:Name="listbox1">
            <ListBox.ItemTemplate>
              <DataTemplate>
                <Grid>
                  <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="Auto"/>
                  </Grid.ColumnDefinitions>
                  <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                  </Grid.RowDefinitions>
                  <TextBlock Text="Titre" Grid.Column="0" Grid.Row="0"/>
                  <TextBlock Text="Prix" Grid.Column="0" Grid.Row="1"/>
                  <TextBlock Text="Decsription" Grid.Column="0" Grid.Row="2"/>
                  <TextBlock Text="Url" Grid.Column="0" Grid.Row="3"/>
    
                  <TextBlock Text="{Binding Titre}" Grid.Column="1" Grid.Row="0"/>
                  <TextBlock Text="{Binding Prix}" Grid.Column="1" Grid.Row="1"/>
                  <TextBlock Text="{Binding Description}" Grid.Column="1" Grid.Row="2" />
                  <TextBlock Text="{Binding UrlImage}" Grid.Column="1" Grid.Row="3" />
                </Grid>
              </DataTemplate>
            </ListBox.ItemTemplate>
          </ListBox>
        </Grid>
    

     


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    mardi 17 mai 2011 05:13
  • bonjour Pascal...j'ai fait ce que tu ma demander,mais il n y a  d'affichge de données. 

    voila le code:

    namespace TestPascal
    {
      public partial class MainPage : PhoneApplicationPage
      {
        // Constructeur
        public MainPage()
        {
          InitializeComponent();
        }
        public class Article
        {
          public String Titre { get; set; }
          public decimal Prix { get; set; }
          public String Description { get; set; }
          public String UrlImage { get; set; }
        }
    
        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
          Uri url = new Uri("http://www.diva-software.com/temp/NourVoyages/export/liste.xml", UriKind.Absolute);
          WebClient client = new WebClient();
          client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
          client.DownloadStringAsync(url);
    
        }
        void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
          StringReader stream = new StringReader(e.Result);
          XmlReader reader = XmlReader.Create(stream);
    
          List<Article> articles = new List<Article>();
          Article article = null;
          while (reader.Read())
          {
            if (reader.IsStartElement())
            {
              switch (reader.Name)
              {
                case "title":
                  {
                    if (reader.Read())
                    {
                      if (article == null)
                        article = new Article();
                      article.Titre = reader.Value;
    
                    }
                  }
                  break;
                case "price":
                  {
                    if (reader.Read())
                    {
                      Int32 iPrix = 0;
                      Int32.TryParse(reader.Value, out iPrix);
                      article.Prix = iPrix;
                    }
                  }
                  break;
                case "short_description":
                  {
                    if (reader.Read())
                    {
                      article.Description = reader.Value;
                    }
                  }
                  break;
                case "image_url":
                  {
                    if (reader.Read())
                    {
                      article.UrlImage = reader.Value;
                      articles.Add(article);
    
    
                    }
                  }
                  break;
    
              }
    
    
    
            }
    
          }
    
          listbox1.ItemsSource = articles;
        }
        
      }
    }
    

    mardi 17 mai 2011 12:12
  • Dans le constructeur, il manque l'abonnement au Load  :

    this.Loaded += new RoutedEventHandler(MainPage_Loaded);
    

     Sans cet appel, on ne se connecte pas au webService et donc on ne peut pas remplir la ListBox.

     

    // Constructor
        public MainPage()
        {
          InitializeComponent();
          this.Loaded += new RoutedEventHandler(MainPage_Loaded);
        }
    

     


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    mardi 17 mai 2011 18:19
  • bonsoir Pascal

    voila l'app tourne,mais a 50%... il manque encore quelque chose.

    Description:

    elle affiche les offres de voyages d'une façon successive (si on a 3 offres ont trouve 3 éléments afficher),mais le problème est qu'elle affiche le même offren fois!!!![n=le nombre des offres dans la base]

    je ne sais pas celons quel critère elle fait le choix de l'offre (//// je pense le dernier ajouter\\\\\) 

    affichage demandé: je veux afficher de cet manière 

    paris

    3 jours

    1300 euro

    --------------

    Rome

    4 jours

    1600 euro

    -------------

    Madrid

    6 jours

    2000 euro

     

    affichage obtenu: résultat obtenu dans mon cas est le suivant:

     

    paris

    3 jours

    1300 euro

    --------------

     

    paris

    3 jours

    1300 euro

    --------------

     

    paris

    3 jours

    1300 euro

    --------------

    je pense que j'ai bien décrit mon problème.....

     

     

    Merci Pascal pour l'aide. 

     

     


    mardi 17 mai 2011 22:43
  • Oui c'est de ma faute j'ai fait une erreur dans le code dans le switch, je ne réinstancie pas l'objet, voici le code c# dans son intégralité :

    // Constructeur
        public MainPage()
        {
          InitializeComponent();
          this.Loaded +=new RoutedEventHandler(MainPage_Loaded);
        }
    
        public class Article
        {
          public String Titre { get; set; }
          public decimal Prix { get; set; }
          public String Description { get; set; }
          public String UrlImage { get; set; }
        }
    
        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
          Uri url = new Uri("http://www.diva-software.com/temp/NourVoyages/export/liste.xml", UriKind.Absolute);
          WebClient client = new WebClient();
          client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
          client.DownloadStringAsync(url);
    
        }
    
        void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
          StringReader stream = new StringReader(e.Result);
          XmlReader reader = XmlReader.Create(stream);
    
          List<Article> articles = new List<Article>();
          Article article = null;
          while (reader.Read())
          {
            if (reader.IsStartElement())
            {
              switch (reader.Name)
              {
                case "title":
                  {
                    if (reader.Read())
                    {
                      
                      article = new Article();
                      article.Titre = reader.Value;
                    }
                  }
                  break;
                case "price":
                  {
                    if (reader.Read())
                    {
                      Int32 iPrix = 0;
                      Int32.TryParse(reader.Value, out iPrix);
                      article.Prix = iPrix;
                    }
                  }
                  break;
                case "short_description":
                  {
                    if (reader.Read())
                    {
                      article.Description = reader.Value;
                    }
                  }
                  break;
                case "image_url":
                  {
                    if (reader.Read())
                    {
                      article.UrlImage = reader.Value;
                      articles.Add(article);
                    }
                  }
                  break;
              }
            }
          }
          listbox1.ItemsSource = articles;
    
        }
    

     

     


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    mercredi 18 mai 2011 05:20
  • wehhhhhhhhhhhh... ça tourne!!!!!

    Merci infiniment Pascal...vraiment tu ma aider a faire un grand pas dans mon PFE !!!

    mercredi 18 mai 2011 17:02
  • De rien, cela fait toujours plaisir de pouvoir aider quelqu'un.

    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    mercredi 18 mai 2011 18:58
  • bonjour Pascal!!

     j'ai besoin encore une fois de tes connaissances.

    disant que après l'affichage de nos annonces d'une façon bien organisée,en veut faire cet action:

    quand on Click sur l'image,elle nous envoie a une nouvelle page(DetailPage.Xaml) ou on trouve les détails de l'offre,cet page est unique mais son  contenu est différent celons l'offre sur le quel on a cliquer [la page doit charger les informations avec la même procédure de Mainpage.Xaml],mais elle doit savoir sur quel offre on a cliquer exactement pour quel sait qu'elle balise <long_Description> ramener .celle 1er,2ieme,3ieme  annonce??

    j’espère que ma question est claire,et que ta compris mon idée.

     

    Merci infiniment

    vendredi 20 mai 2011 04:15
  • Bonjour c'est un peu plus compliqué mais je vais tacher de vous l'expliquer avec un exemple de code :

    Il faut d'abord utiliser un mappeur pour faciliter la navigation, cela se fait avec la classe UriMapper (dans le nameSpace System.Windows.Navigation).

    Le mieux est de le declarer dans le xam de App.xaml :

     

    <!--Application Resources-->
     <Application.Resources>
      <nav:UriMapper x:Key="UriMapper">
       <nav:UriMapper.UriMappings>
        <nav:UriMapping Uri="/" MappedUri="/MainPage.xaml" />
        <nav:UriMapping Uri="/Home/{Annonce}" MappedUri="/DetailPage.xaml?Annonce={Annonce}"/>
       </nav:UriMapper.UriMappings>
      </nav:UriMapper>
     </Application.Resources>
    

     

    Ensuite dans le code C# de App.xaml.cs voila le code à mettre dans le constructeur :

     

    public App()
      {
       // Global handler for uncaught exceptions. 
       UnhandledException += Application_UnhandledException;
    
       // Show graphics profiling information while debugging.
       if (System.Diagnostics.Debugger.IsAttached)
       {
        // Display the current frame rate counters.
        Application.Current.Host.Settings.EnableFrameRateCounter = true;
    
        // Show the areas of the app that are being redrawn in each frame.
        //Application.Current.Host.Settings.EnableRedrawRegions = true;
    
        // Enable non-production analysis visualization mode, 
        // which shows areas of a page that are being GPU accelerated with a colored overlay.
        //Application.Current.Host.Settings.EnableCacheVisualization = true;
       }
    
       // Standard Silverlight initialization
       InitializeComponent();
    
       // Phone-specific initialization
       InitializePhoneApplication();
    
       this.RootFrame.UriMapper = Resources["UriMapper"] as UriMapper;
      }
    

     

     


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7


    vendredi 20 mai 2011 19:16
  • Dans l'évènement clique de ton annonce il te faut implémenter la navigation vers DetailPage.xaml :

    //Le chiffre après home correspond au numéro de ton annonce
          Uri u = new Uri("/Home/1", UriKind.Relative);
          this.NavigationService.Navigate(u);
    

    Et dans DetailPage.Xaml il faut implémenter la méthode OnNavigatedTo pour récupérer le numéro de l'annonce :

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
          base.OnNavigatedTo(e);
          if (NavigationContext.QueryString.ContainsKey("Annonce"))
          {
            String test = NavigationContext.QueryString["Annonce"];
          }
        }
    

     


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    • Proposé comme réponse Pascal Saille vendredi 20 mai 2011 19:24
    vendredi 20 mai 2011 19:23
  • bonjour Pascal

    j'ai une petite idée, donne moi ton avis si vous voyez qu' elle est utile!!!

    si on récupère tout les données de la page XMl dans une table a 2 dimension Tab [x] [y] comme suit:

                    | <id>   |  <title>   |   <prix>  |  <url_image>  |  <description> |.....

    Annonce 1

    annonce 2

    .

    .

    .

    N.B: cet table se charge a chaque lancement de l'application.

    et après nous récupérons les données on jouant avec les matrices.

    Exemple:

    si je veux récupérer <description> du premier offre afficher -----> je le trouve dans la cellule  Tab[0] [4]  

    Alors qu'est ce que tu t'en dit?? c'est faisable? 

    ça nous complique les choses ou le contraire?

     

    samedi 21 mai 2011 00:57
  • Bonjour,

    Ta solution est possible mais je préfère manipuler une List<T> plutôt qu'un tableau quand j'ai le choix.

    Je vais te montrer ma solution complète d'après ton exemple, donc je vais reprendre le code depuis le début et tu vas me dire si sa te convient.

    Je vais Poster en plusieurs morceaux pour permettre une meilleur visibilité.

    Voici le code Qu'il faut mettre Dans app.Xaml :

    <!--Application Resources-->
      <Application.Resources>
        <nav:UriMapper x:Key="UriMapper">
          <nav:UriMapper.UriMappings>
            <nav:UriMapping Uri="/" MappedUri="/MainPage.xaml" />
            <nav:UriMapping Uri="/Home/{Annonce}" MappedUri="/DetailPage.xaml?Annonce={Annonce}"/>
          </nav:UriMapper.UriMappings>
        </nav:UriMapper>
      </Application.Resources>
    

    Et voici le code qu'il faut mettre dans App.Xaml.Cs :

    /// <summary>
        /// Collection des articles valides pour toutes l'applications
        /// </summary>
        public static List<Article> Articles { get; set; }
    
        /// <summary>
        /// Constructor for the Application object.
        /// </summary>
        public App()
        {
          // Global handler for uncaught exceptions. 
          UnhandledException += Application_UnhandledException;
    
          // Show graphics profiling information while debugging.
          if (System.Diagnostics.Debugger.IsAttached)
          {
            // Display the current frame rate counters.
            Application.Current.Host.Settings.EnableFrameRateCounter = true;
    
            // Show the areas of the app that are being redrawn in each frame.
            //Application.Current.Host.Settings.EnableRedrawRegions = true;
    
            // Enable non-production analysis visualization mode, 
            // which shows areas of a page that are being GPU accelerated with a colored overlay.
            //Application.Current.Host.Settings.EnableCacheVisualization = true;
          }
    
          // Standard Silverlight initialization
          InitializeComponent();
    
          // Phone-specific initialization
          InitializePhoneApplication();
    
          this.RootFrame.UriMapper = Resources["UriMapper"] as UriMapper;
        }
    

     

     

     


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    samedi 21 mai 2011 08:37
  • Voici le Code de MainPage.Xaml :

    <!--ContentPanel - place additional content here-->
          <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <ListBox x:Name="listbox1">
              <ListBox.ItemTemplate>
                <DataTemplate>
                  <Grid Margin="0,10,0,10">
                    <Grid.ColumnDefinitions>
                      <ColumnDefinition Width="Auto"/>
                      <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                      <RowDefinition Height="Auto"/>
                      <RowDefinition Height="Auto"/>
                      <RowDefinition Height="Auto"/>
                      <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>
                    <TextBlock Text="Titre" Grid.Column="0" Grid.Row="0" Margin="0,0,10,0"/>
                  <TextBlock Text="Prix" Grid.Column="0" Grid.Row="1" Margin="0,0,10,0"/>
                  <TextBlock Text="Decsription" Grid.Column="0" Grid.Row="2" Margin="0,0,10,0"/>
                  <TextBlock Text="Url" Grid.Column="0" Grid.Row="3" Margin="0,0,10,0"/>
    
                    
                    <TextBlock Text="{Binding Titre}" Grid.Column="1" Grid.Row="0"/>
                    <TextBlock Text="{Binding Prix}" Grid.Column="1" Grid.Row="1"/>
                    <TextBlock Text="{Binding Description}" Grid.Column="1" Grid.Row="2" TextWrapping="Wrap" />
                  <Image Source="{Binding Thumbnail}" Grid.Column="1" Grid.Row="3" Width="96" HorizontalAlignment="Left" />
                  </Grid>
                </DataTemplate>
              </ListBox.ItemTemplate>
            </ListBox>
          </Grid>
    

     

    Voici le code de MainWindow.Xam.Cs + le code la classe Article :

    public partial class MainPage : PhoneApplicationPage
      {
        // Constructeur
        public MainPage()
        {
          InitializeComponent();
          this.Loaded += new RoutedEventHandler(MainPage_Loaded);
          this.listbox1.SelectionChanged += new SelectionChangedEventHandler(listbox1_SelectionChanged);
        }
    
        void listbox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
          //Le chiffre après home correspond à l'index de ton article dans la collection
          Uri u = new Uri("/Home/" + listbox1.SelectedIndex, UriKind.Relative);
          this.NavigationService.Navigate(u);
        }    
    
        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
          Uri url = new Uri("http://www.diva-software.com/temp/NourVoyages/export/liste.xml", UriKind.Absolute);
          WebClient client = new WebClient();
          client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
          client.DownloadStringAsync(url);
    
    
        }
    
        void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
          StringReader stream = new StringReader(e.Result);
          XmlReader reader = XmlReader.Create(stream);
          if (App.Articles == null)
            App.Articles = new List<Article>();
          App.Articles.Clear();
          Article article = null;
          while (reader.Read())
          {
            if (reader.IsStartElement())
            {
              switch (reader.Name)
              {
                case "id":
                  {
                    if (reader.Read())
                    {
    
                      article = new Article();
                      Int32 id = 0;
                      Int32.TryParse(reader.Value, out id);
                      article.Id = id;
                    }
                  }
                  break;
                case "title":
                  {
                    if (reader.Read())
                    {
    
                      article.Titre = reader.Value;
                    }
                  }
                  break;
                case "duration":
                  {
                    if (reader.Read())
                    {
    
                      article.Duree = reader.Value;
                    }
                  }
                  break;
                case "price":
                  {
                    if (reader.Read())
                    {
                      decimal iPrix = 0;
                      Decimal.TryParse(reader.Value, out iPrix);
                      article.Prix = iPrix;
                    }
                  }
                  break;
                case "short_description":
                  {
                    if (reader.Read())
                    {
                      article.Description = reader.Value;
                    }
                  }
                  break;
                case "long_description":
                  {
                    if (reader.Read())
                    {
                      article.DescriptionComplete = reader.Value;
                    }
                  }
                  break;
                case "thumbnail_url":
                  {
                    if (reader.Read())
                    {
                      article.Thumbnail = reader.Value;
                    }
                  }
                  break;
                case "image_url":
                  {
                    if (reader.Read())
                    {
                      article.UrlImage = reader.Value;
                      App.Articles.Add(article);
                    }
                  }
                  break;
              }
            }
          }
          listbox1.ItemsSource = App.Articles;
    
        }
    
    
      }
    
      public class Article
      {
        public Int32 Id { get; set; }
        public String Titre { get; set; }
        public String Duree { get; set; }
        public decimal Prix { get; set; }
        public String Description { get; set; }
        public String DescriptionComplete { get; set; }
        public String Thumbnail { get; set; }
        public String UrlImage { get; set; }
      }
    

     


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    samedi 21 mai 2011 08:39
  • Et pour finir voici le code de DetailPage.Xaml :

    <!--ContentPanel - place additional content here-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
          <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
          </Grid.ColumnDefinitions>
          <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
          </Grid.RowDefinitions>
          <TextBlock Text="Titre" Grid.Column="0" Grid.Row="0" Margin="0,0,10,0"/>
          <TextBlock Text="Durée" Grid.Column="0" Grid.Row="1" Margin="0,0,10,0"/>
          <TextBlock Text="Prix" Grid.Column="0" Grid.Row="2" Margin="0,0,10,0"/>
          <TextBlock Text="Description" Grid.Column="0" Grid.Row="3" Margin="0,0,10,0"/>
    
          <TextBlock Text="{Binding Titre}" Grid.Column="1" Grid.Row="0"/>
          <TextBlock Text="{Binding Duree}" Grid.Column="1" Grid.Row="1"/>
          <TextBlock Text="{Binding Prix}" Grid.Column="1" Grid.Row="2"/>
          <TextBlock Text="{Binding DescriptionComplete}" Grid.Column="1" Grid.Row="3" TextWrapping="Wrap" />
          <Image Source="{Binding Thumbnail}" Grid.Column="1" Grid.Row="4" HorizontalAlignment="Stretch" />
    
        </Grid>
    

    Et voic le code de detailPage.xaml.cs

    public partial class Page1 : PhoneApplicationPage
      {
        public Page1()
        {
          InitializeComponent();
        }
    
    
        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
          base.OnNavigatedTo(e);
          if (NavigationContext.QueryString.ContainsKey("Annonce"))
          {
            String iRangCollection = NavigationContext.QueryString["Annonce"];
            Int32 iIndex = 0;
            Int32.TryParse(iRangCollection, out iIndex);
            //On à récipérer l'index, on vérifie seulement si celui ci n'est pas supérieur au nombres 
            //d'articles dans la collection pour eviter une exception
            if (iIndex < App.Articles.Count)
            {
              this.DataContext = App.Articles[iIndex];
            }
          }
        }
      }
    

     

     


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    samedi 21 mai 2011 08:41
  • bonjour Pascal!!!

    c'est parfait ton travail,vraiment tu m'aide a avancé,merci infiniment. 

    A propos de l'autre sujet du Web service et la BD (écriture de données du téléphone vers une base)...c'est faisable??

    et est ce que WP7 nous permet de faire cet tache????

    1 merci de +


    dimanche 22 mai 2011 05:40
  • J'y ai répondu, donc la réponse est oui mais avec un webservice d'après mes connaissances. Après il y a peut être une façon de faire que j'ignore (c'est même pas peut-être , c'est surement).

    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    dimanche 22 mai 2011 07:39