2009-09-08 13 views
1

J'ai un GridView lié à certaines données XML qui ressemble à ceci:Affichage des éléments répétés dans un GridView

<Root> 
    <Column1> 
     <Item1 type="l1style">Item 1</Item1> 
     <Item2 type="l2style">Item 2</Item2> 
     <Item3 type="l3style">Item 3</Item3> 
    </Column1> 

    <Column2> 
     <Item4 type="l1style">Item 4</Item4> 
     <Item5 type="l2style">Item 5</Item5> 
    </Column2> 

    <Column3> 
     <Item6 type="l1style">Item 6</Item6> 
     <Item7 type="l2style">Item 7</Item7> 
    </Column3> 
</Root> 

Dans certains cas, cependant, le nœud Colonne3 est pas là.

Je voudrais rendre quelque chose comme:

<table> 
    <thead> 
     <tr> 
      <th scope="col">Column1</th> 
      <th scope="col">Column2</th> 
      <th scope="col">Column3</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td>     
       <ul> 
        <li class="l1style">Item 1</li> 
        <li class="l2style">Item 2</li> 
        <li class="l3style">Item 3</li> 
       </ul> 
      </td> 
      <td> 
       <ul> 
        <li class="l1style">Item 4</li> 
        <li class="l2style">Item 5</li> 
       </ul> 
      </td> 
      <td> 
       <ul> 
        <li class="l1style">Item 6</li> 
        <li class="l2style">Item 7</li> 
       </ul> 
      </td> 
     </tr> 
    </tbody> 
</table> 

Comment un contrôle Repeater être utilisé à l'intérieur d'un GridView, ou est-il une meilleure façon d'y arriver? Merci.

Répondre

1

Cela ressemble à du code html qui pourrait être émis par un répéteur ou un datalist, sans gridvew. Si vous utilisez un gridview, vous devez placer un répéteur dans un itemtemplate dans une colonne templatefield. Vous devez lier quelque chose à la grille pour qu'elle affiche une ligne pour le répéteur. Je pense qu'un répéteur seul ferait ce que vous voulez.

+0

Si je place un répéteur dans un TemplateField, comment puis-je définir sa source de données comme étant la colonne actuelle (Colonne 1, 2 et [parfois] 3)? – Bullines

+0

Vous pouvez utiliser <% # Bind ("fieldname")%> dans un littéral, mais je ne suis pas sûr que ce soit la meilleure façon de procéder. Est-ce un gros problème de remplacer le gridview par un répéteur? Un répéteur est beaucoup plus simple qu'un gridview et est léger et plus rapide. – Steve

1

Il y a aussi un problème avec le code HTML que vous affichez comme résultat attendu. Vous ne supprimez aucune colonne dans les lignes en utilisant <td> qui correspondra à vos en-têtes de colonne <th>.

Vous devez être quelque chose comme exportez:

<table> 
<tr> 
    <th> ... </th> 
    <th> ... </th> 
    <th> ... </th> 
</tr> 
<tr> 
    <td> ... </td> 
    <td> ... </td> 
    <td> ... </td> 
</tr> 
... 

Steve est juste que vous pouvez y parvenir avec un répéteur. Déclarez simplement un modèle d'en-tête pour contenir l'étiquette de la table d'ouverture et la ligne d'en-tête, un modèle de pied pour contenir l'étiquette de fermeture de la table et un modèle d'élément pour afficher les lignes d'éléments.

Vous pouvez également essayer d'utiliser la transformation xml en utilisant une feuille de style xsl. Vous chargez votre xml, appliquez la transformation et hé hé presto joliment formaté. Essayez googling pour quelques exemples. Je reviendrai ici plus tard quand j'aurai plus de temps et que je laisserai un exemple si tu n'as pas de chance.

Questions connexes