Classe PlaceHolder l'affichage de l'ordre voulu

Résolu
aspkiddy Messages postés 38 Date d'inscription jeudi 9 juin 2011 Statut Membre Dernière intervention 15 janvier 2014 - 30 août 2011 à 22:15
aspkiddy Messages postés 38 Date d'inscription jeudi 9 juin 2011 Statut Membre Dernière intervention 15 janvier 2014 - 7 sept. 2011 à 20:40
Bonjour,

Je récupère les informations sous le format XML d'un service Web...

Je mets les informations dans un " Generic List<type>" et les affiche par la "classe PlaceHolder".

Affichage c'est en ordre de l'information venue par le service WEB donc par "Id".
Comment peux-je changer l'affichage de cet ordre : par exemple selon "BwEtatId"


---Pour clarifier la situation : -----
Voici mon code :
                List<ConstructIdent> monListSansAnnulation = new List<ConstructIdent>();
                int etatId;
                foreach (ConstructIdent inscription in monInscription)
                {
                    etatId = inscription.BwEtatId;

                    if (!etatId.Equals(3))
                    {
                        monListSansAnnulation.Add(inscription);
                    }
                }


                int i = 1;
                PlaceHolder1.Controls.Add(new LiteralControl("\"));
PlaceHolder1.Controls.Add(new LiteralControl(\"----
Inscription No., Description, Etat, Debut, Fin, changement, \"));

tVisualiserPageState.Inscriptions = new ConstructIdent[monListSansAnnulation.Count];

foreach (ConstructIdent inscription in monListSansAnnulation)
{
etatId = inscription.BwEtatId;

string etats;

switch (etatId)
{
case 0:
etats = \"Pas encore\";
break;
case 1:
etats = \"Actif\";
break;
case 2:
etats = \"Suspendu\";
break;
case 3:
etats = \"Annulé\";
break;
case 4:
etats = \"Expiré\";
break;
default:
etats = \"non identifié\";
break;
}

PlaceHolder1.Controls.Add(new LiteralControl(\"----
\"));

// inscription id
PlaceHolder1.Controls.Add(new LiteralControl(\""));
Label inscriptionIdLabel = new Label();
inscriptionIdLabel.ID = "inscriptionIdLabel" + i.ToString();
inscriptionIdLabel.Text = inscription.Id.ToString();
PlaceHolder1.Controls.Add(inscriptionIdLabel);
PlaceHolder1.Controls.Add(new LiteralControl(", \"));

// descriptionData
PlaceHolder1.Controls.Add(new LiteralControl(\""));
Label descriptionDataLabel = new Label();
descriptionDataLabel.ID = "descriptionDataLabel" + i.ToString();
descriptionDataLabel.Text = GetDescriptionData(inscription.BaseId);
PlaceHolder1.Controls.Add(descriptionDataLabel);
PlaceHolder1.Controls.Add(new LiteralControl(", \"));
PlaceHolder1.Controls.Add(new LiteralControl(\""));

// etats
Label etatsLabel = new Label();
etatsLabel.ID = "etatsLabel" + i.ToString();
etatsLabel.Text = etats;
PlaceHolder1.Controls.Add(etatsLabel);
PlaceHolder1.Controls.Add(new LiteralControl(", \"));
PlaceHolder1.Controls.Add(new LiteralControl(\""));

// Debut etat
Label DepartDebutLabel = new Label();
DepartDebutLabel.ID = "DepartDebutLabel" + i.ToString();
DepartDebutLabel.Text = GetDepartDescription(inscription.BaseId, inscription.IdDepart);
PlaceHolder1.Controls.Add(DepartDebutLabel);
PlaceHolder1.Controls.Add(new LiteralControl(", \"));
PlaceHolder1.Controls.Add(new LiteralControl(\""));

// Fin etat
Label FinDebutLabel = new Label();
FinDebutLabel.ID = "FinDebutLabel" + i.ToString();
FinDebutLabel.Text = GetDepartDescription(inscription.BaseId, inscription.IdFin);
PlaceHolder1.Controls.Add(FinDebutLabel);
PlaceHolder1.Controls.Add(new LiteralControl(", \"));

// bouton changement
PlaceHolder1.Controls.Add(new LiteralControl(\""));
Button changementBouton = new Button();
changementBouton.ID = "changementBouton_" + i.ToString();
changementBouton.Text = "Rectifier";
if ((inscription.BwEtatId == 3))
changementBouton.Enabled = false;

changementBouton.Click += new System.EventHandler(this.changementBouton_Click);
PlaceHolder1.Controls.Add(changementBouton);

PlaceHolder1.Controls.Add(new LiteralControl(", \"));
PlaceHolder1.Controls.Add(new LiteralControl(\"\"));

tVisualiserPageState.Inscriptions[i - 1] = inscription;
i++;

}

                PlaceHolder1.Controls.Add(new LiteralControl("
"));



                SavePageState(); 


---Pour clarifier la situation : -----
voici exemple des informations venu par Web service :
<?xml version="1.0" encoding="utf-8" ?> 

 <ConstructIdent>
  5
  1a1
  4
  4408R
  4410R 
 </ConstructIdent>

 <ConstructIdent>
  9
  1a1
  0
  4408R
  4410R 
 </ConstructIdent>


 <ConstructIdent>
  18
  1a1
  1
  4408R
  4410R 
 </ConstructIdent>


Merci

11 réponses

aspkiddy Messages postés 38 Date d'inscription jeudi 9 juin 2011 Statut Membre Dernière intervention 15 janvier 2014
7 sept. 2011 à 20:40
Bonjour, voila la solution plus simple et plus belle :

Merci pour vos aides :

					//(...... etc)

//demande info par nameId sur les inscriptions
              ConstructIdent[] myInscriptions = InscriptionsWP.GetInscriptions(nameId);

                // declaration Generic List<type>
              List<ConstructIdent> monListSansAnnulation = new List<ConstructIdent>();
                int etatId;
            

int localisation;
            bool repere;

            foreach (ConstructIdent inscription in monInscription)
            {
                etatId = inscription.BwetatId;

                if (!etatId.Equals(3))
                {
                    localisation = 0;
                    repere = false;

                    foreach (ConstructIdent InsertInscription in monListSansAnnulation)
                    {
                        if (inscription.BwetatId < InsertInscription.BwetatId)
                        {


                            monListSansAnnulation.Insert(localisation, inscription);
                            repere = true;
                            break;
                        }

                        localisation++;
                    }



                    if (!repere)
                    {

                        monListSansAnnulation.Add(inscription);
                    }
                }
            }

           
int i = 1;
//(...... etc)
3
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
30 août 2011 à 22:29
Bonsoir,

il faut que dans ta classe ConstructIdent, tu implémentes Icomparable.

Regarde cette source


Whismeril
0
aspkiddy Messages postés 38 Date d'inscription jeudi 9 juin 2011 Statut Membre Dernière intervention 15 janvier 2014
31 août 2011 à 15:12
Bonjour Whismeril,

Je ne comprends pas très bien...
ConstructIdent, c'est dans webService en format xml donc je ne peux pas changer le web service...


je demande, par mon fichier c#, ainsi les informations :


//demande info par nameId sur les inscriptions
ConstructIdent[] myInscriptions = InscriptionsWP.GetInscriptions(nameId);

// declaration Generic List<type>
List<ConstructIdent> monListSansAnnulation = new List<ConstructIdent>();
0
aspkiddy Messages postés 38 Date d'inscription jeudi 9 juin 2011 Statut Membre Dernière intervention 15 janvier 2014
31 août 2011 à 17:07
Dans mon cas, est ce que c,est plus facile d'utiliser "Enumerable.OrderBy" ?
0

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

Posez votre question
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
31 août 2011 à 17:54
Bonjour,
je pensais que tu avais créé une classe en fonction du format de ton web service.
Là je ne sais pas.


Whismeril
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
1 sept. 2011 à 14:15
Salut

Tu peux utiliser Linq pour faire un OrderBy()

maListeOrdonnee maListe.OrderBy(element> element.BwEtatId).ToList();


Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
0
aspkiddy Messages postés 38 Date d'inscription jeudi 9 juin 2011 Statut Membre Dernière intervention 15 janvier 2014
1 sept. 2011 à 22:58
Bonsoir krimog,

Merci pour ton message

ce que j'ai fait...
j'ai ajouté les lignes suivantes après le "using System.Collections.Generic;" :
using System.Linq; 
using System.Text;  


ensuite après la déclaration Generic List, j'ai ajouté ton code :
//demande info par nameId sur les inscriptions
              ConstructIdent[] myInscriptions = InscriptionsWP.GetInscriptions(nameId);

//demande info par nameId sur les inscriptions
ConstructIdent[] myInscriptions = InscriptionsWP.GetInscriptions(nameId);

// declaration Generic List<type>
List<ConstructIdent> monListSansAnnulation = new List<ConstructIdent>();

//ton code Linq : !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
monListSansAnnulation monListSansAnnulation.OrderBy(element> element.BwEtatId).ToList();

//ensuite la reste : 

Mais j'ai eu le message d'erreur :
[list]
Compiler Error Message: CS0234: The type or namespace name 'Linq' does not exist in the namespace 'System' (are you missing an assembly reference?)
Line: 10

Line 10: using System.Linq;
/list
Alors où je fais la bêtise ?
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
2 sept. 2011 à 09:29
Salut

Je vois deux possibilités pour ton problème.

1) Tu n'es pas en Framework 3.5 ou supérieur
(Il faut que tu aies minimum Visual Studio 2008, et que quand tu fasse Clic-droit -> propriétés sur ton projet, tu aies bien "Framework Cible" 3.5 ou supérieur)
2) Tu n'as pas la référence vers System.Core
Vérifie si elle y est dans le dossier References de ton projet. Si elle n'y est pas, il faut que tu fasses Clic-droit sur ton projet -> Ajouter une référence -> Onglet ".NET" -> System.Core

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
0
aspkiddy Messages postés 38 Date d'inscription jeudi 9 juin 2011 Statut Membre Dernière intervention 15 janvier 2014
2 sept. 2011 à 19:03
Salut Krimog,

sur mon pc, local, :
[list]
Microsoft Visual Studio 2010
Version 10.0.30319.1 RTMRel
Microsoft .NET Framework
Version 4.0.30319 RTMRel
Version installée : WD Express
Microsoft Visual Web Developer 2010
/list

et j'ai .NET Framework 4
en plus sous WD Express lorsque j'ai voulu ajouté la référence vers System.Core mais j'ai eu le message suivant :
Le site Web fait déjà référence à l'assembly 'System"core'

Et j'affiche la page sans message d'erreur sous Firefox et IE localement sur mon pc...

Sur mon serveur (donc, je n'ai pas installé WD 2010 Express)
il y a MS.Net Fremworrk 3.5 SP1 et j'ai ainsi System.Core.dll dans C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5
mais je n'arrive pas afficher la page : il y a la même erreur....
[list]
Compiler Error Message: CS0234: The type or namespace name 'Linq' does not exist in the namespace 'System' (are you missing an assembly reference?)
Line: 10
/list

alors comment je peux référencer, sur le serveur, sans WD Express, à l'assembly 'System.core' ?
0
aspkiddy Messages postés 38 Date d'inscription jeudi 9 juin 2011 Statut Membre Dernière intervention 15 janvier 2014
2 sept. 2011 à 19:17
encore moi Krimog,
et voici mon 2e question :

avec ton code :
monListSansAnnulation <gras>monListSansAnnulation.OrderBy(element> element.BwEtatId).ToList();</gras>


j'arrive afficher ma page, localement, sous Firefox/ IE sans erreur, mais le résultat n'est pas trié selon BwEtatId. c'est comme avant (en ordre de l'information venue par le service WEB donc par "Id")

Dans WD 2010 Express, lorsque mon curseur est sur OrderBy

J'ai le message suivant de MVWD2010Express :
[i]"(variable locale) List<ConstructIdent> monListSansAnnulation
Erreur :
'System.Collections.Generic.List' ne contient pas une définition pour 'OrderBy' et aucune méthode d'extension 'OrderBy' accetant un premier argument de type 'System.Collections.Generic.List' n'a été trouvée (une
directive using ou une référence d'assembly est-elle manquante ?)/i

Pourquoi il y a ce message et pourquoi il n'y a pas l'affichage en ordre de "BwEtatId"??

Bonne journée

p.s : rappel :
//demande info par nameId sur les inscriptions
              ConstructIdent[] myInscriptions = InscriptionsWP.GetInscriptions(nameId);

//demande info par nameId sur les inscriptions
ConstructIdent[] myInscriptions = InscriptionsWP.GetInscriptions(nameId);

// declaration Generic List<type>
List<ConstructIdent> monListSansAnnulation = new List<ConstructIdent>();

//ton code Linq : !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
monListSansAnnulation monListSansAnnulation.OrderBy(element> element.BwEtatId).ToList();

//ensuite la reste : 
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
2 sept. 2011 à 20:50
Je ne comprends pas pourquoi il ne trouve pas System.Linq (et franchement, je trouve ça étonnant). Mais s'il ne le trouve pas, c'est normal qu'il ne trouve pas la méthode OrderBy() (qui est une méthode d'extension, c'est-à-dire qui ne se trouve pas directement dans la classe).

Quant au fait que tu aies la page sans erreur sous Firefox et IE, je pense que c'est dû au fait que tant qu'il ne peut pas compiler, il ne met pas à jour ton répertoire de sortie. Donc en fait, c'est la dernière version fonctionnelle que tu vois (selon moi).

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
0
Rejoignez-nous