Je parle des composants Ajax Control Toolkit :
http://www.asp.net/ajaxLibrary/AjaxC...Accordion.aspx
En fait, je veux le remplir dynamiquement.
Dans le Header => MARS 2012
Dans le Content => la liste des articles
Version imprimable
Je parle des composants Ajax Control Toolkit :
http://www.asp.net/ajaxLibrary/AjaxC...Accordion.aspx
En fait, je veux le remplir dynamiquement.
Dans le Header => MARS 2012
Dans le Content => la liste des articles
A mon avis, tu vas devoir faire le binding 100% à la main, car ça semble fonctionner avec 1 titre = 1 texte, alors que toi c'est 1 titre = n articles.
Du coup je ferais de la sorte :
- Parcours du résultat de la requête, en alimenant un Dictionary<string, string>
Dans la clé = mois
Dans la valeur = concaténation de tous les articles du mois en question
- Binding de ton contrôle en utilisant le dictionnaire
Je suis sur une autre piste : http://dotnet.developpez.com/ajax/aj...ing-accordion/
J'ai déjà réussi à créer mes Panes avec un Header comme je veux.
Par contre, pour le Content, il me faudrait une requête du genre :
select * from maTable where date in "Mars 2010"
tu vois l'idée ? Je mettrais un SqlDataSource dans chaque Content avec comme paramètre le Header ...
Well, une requête qui fonctionne :
select id, titre, date from tb_une where DATE_FORMAT(date, '%M %Y') = "March 2012"
Par contre, du coup, j'avais pas fait attention mais TOUT est en anglais :(
Problème de la langue mis à part, tu vas te taper une requête par header.
Ça me semble bien lourd pour pas grand chose.
Ma solution demande à peine plus de code, et ne nécessite qu'une seule requête.
En revanche, je suis en train de penser à un truc...
Est-ce que vous pouvez modifier la requête du début comme suit :
=> A quelques détails de syntaxe près.Code:
1
2
3
4 select format(date, mois-annee), group_concat('<p><b>' || titre || '</b><br/>' || texte || '</p>') from articles group by format(date, mois-annee)
Pour une fois que MySQL a une fonction proprio qui est utile, autant en profiter... Ceci permet de concaténer tous les articles de chaque mois
Du coup, une seule requête, et tous les articles dedans, y'a plus qu'à binder !
http://dev.mysql.com/doc/refman/5.0/...functions.html
Oui, tu as raison, ça va être lourd ...
Par contre, je n'arrive pas à trouver d'exemple de Bind d'un Accordion :(
Le tuto ci-dessus ne marche pas ?
Logiquement, couplé avec la requête que je t'ai donné qui utilise group_contact, ça devrait fonctionner comme tu veux : il n'y aura qu'une ligne par mois, qui contiendra tous les articles concaténés.
Donc le binding tout bête devrait fonctionner comme dans le tuto.
Well, sorry ... J'ai pris un autre Doliprane pour me recadrer l'esprit ;)
La requete :
Me renvoie :Code:SELECT DATE_FORMAT(maTable.`date`, '%M %Y') as moisDate, group_concat('<p><b>' || id || '</b><br/>' || titre || '</p>') as donnee FROM maTable GROUP BY DATE_FORMAT(maTable.`date`, '%M %Y') ORDER BY maTable.date DESC
Header => February 2012
Content => System.Byte[]
Doit y avoir un loup ;)
Bah je te laisse jouer avec la doc de MySQL :
Citation:
GROUP_CONCAT(expr)
Syntaxe complète :
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [,col ...]]
[SEPARATOR str_val])
Cette fonction a été ajoutée en MySQL version 4.1. Elle retourne la chaîne résultant de la concaténation de toutes les valeurs du groupe :
mysql> SELECT student_name,
-> GROUP_CONCAT(test_score)
-> FROM student
-> GROUP BY student_name;
ou :
mysql> SELECT student_name,
-> GROUP_CONCAT(DISTINCT test_score
-> ORDER BY test_score DESC SEPARATOR " ")
-> FROM student
-> GROUP BY student_name;
Avec MySQL, vous pouvez obtenir la concaténation d'une série d'expressions. Vous pouvez éliminer les doublons en utilisant DISTINCT. Si vous voulez trier les valeurs du résultat, il faut utiliser ORDER BY. Pour trier en ordre inverse, ajoutez le mot clé DESC (descendant) au nom de la colonne que vous triez dans la clause ORDER BY. Par défaut, l'ordre est ascendant. Cela peut être spécifié explicitement avec le mot clé ASC. SEPARATOR est une chaîne qui sera insérée entre chaque valeur du résultat. La valeur par défaut est une virgule ‘","’. vous pouvez supprimer le séparateur en spécifiant la chaîne vide SEPARATOR "".
Vous pouvez donner une taille maximale à la variable group_concat_max_len de votre configuration. La syntaxe pour faire cela durant l'exécution est :
SET [SESSION | GLOBAL] group_concat_max_len = unsigned_integer;
Si une taille maximale a été atteinte, le résultat sera tronqué à cette taille maximale.
Note : il y a encore de petites limitations pour GROUP_CONCAT() lorsqu'il faut utiliser des valeurs DISTINCT avec ORDER BY et et en utilisant les valeurs BLOB. Voyez Section 1.5.7.4, « Bugs connus / limitations de MySQL ».
GROUP_CONCAT() a été ajoutée en MySQL 4.1.
Oui, j'ai bien lu tout ça ... :(
Bah normalement ton System.Byte[] ça devrait être un String :aie:
Va voir du côté du forum SQL voir si quelqu'un saura t'aider...
Oui, normalement :)
Oui, je cherche aussi ;)
En tout cas, merci beaucoup pour ton aide précieuse. Je pense que quand j'aurais résolu mon problème de ricouette ça ira beaucoup mieux.
Si cela t’intéresse, j'ai créé un post SQL :
http://www.developpez.net/forums/d11...e/#post6572200
Je viens de trouver. Il manquait un CAST pour l'id.
GROUP_CONCAT('<p><b>', CAST(id AS CHAR), '</b><br/>', titre, '</p>' ORDER BY maTable.date DESC )
Merci encore pour votre aide.