Comment faire son nid dans les répéteurs asp.net
J'ai besoin de savoir comment faire son nid répéteurs dans un contrôle utilisateur. Le html côté des choses, c'est bien, c'est la liaison et le code derrière, j'ai besoin d'aide. J'ai seulement été en mesure de trouver des exemples à l'aide d'une source de données sql, ce qui n'aide pas vraiment.
Mon répéteurs ressembler à ceci:
<asp:Panel ID="pnlDiscipline" runat="server" CssClass="">
<asp:Repeater ID="rptDiscipline" runat="server">
<ItemTemplate>
<h4><%#Eval("Discipline")%></h4>
<ul>
<asp:Repeater ID="rptPrograms" runat="server">
<ItemTemplate>
<li><asp:HyperLink runat="server" Text='<%#Eval("Name") %>' NavigateUrl='<%#Eval("Link") %>'></asp:HyperLink> <%#Eval ("Notation") %></li>
</ItemTemplate>
</asp:Repeater>
</ul>
</ItemTemplate>
</asp:Repeater>
Ce que je dois faire, je l'espère, assez clair - h4 discipline doit apparaître qu'une seule fois, toutes les entrées qui appartiennent à la discipline sont énumérés ci-dessous, puis le lendemain en h4, la liste appropriée, la prochaine h4 et ainsi de suite.
La source de données est un dataview créé dans le code-behind où chaque ligne est "Nom", "Lien", "NOtation" et "Discipline". J'ai lié le dataview à la ultrapériphériques répéteur, et il se comporte comme prévu - les listes de la discipline nom de chaque entrée, mais ne montre pas de données à l'intérieur d'un répétiteur.
Comment dois-je procéder pour faire ce travail?
EDIT: Juste pour préciser, j'ai un datatable dans le code-behind. Chaque ligne de cette table est un élément, chaque élément appartient à une discipline. Je veux utiliser le répéteur externe à la liste des disciplines, à l'intérieur de la liste des articles regroupés sous chaque discipline. Comme:
<h4>DISCIPLINE 1</h4>
<ul>
<li>Item</li>
<li>Item</li>
<li>Item</li>
</ul>
<h4>DISCIPLINE 2</h4>
<ul>
<li>Item</li>
<li>Item</li>
</ul>
<h4>DISCIPLINE 3</h4>
<ul>
<li>Item</li>
<li>Item</li>
</ul>
À l'heure actuelle, la liaison de la datatable à l'extérieur de la répétition donne ceci (exemple utilise les données ci-dessus):
<h4>DISCIPLINE 1</h4>
<h4>DISCIPLINE 1</h4>
<h4>DISCIPLINE 1</h4>
<h4>DISCIPLINE 2</h4>
<h4>DISCIPLINE 2</h4>
<h4>DISCIPLINE 3</h4>
<h4>DISCIPLINE 3</h4>
J'ai utilisé OnItemDataBound sur l'extérieur, répétition, comme l'a suggéré, et comme un cas de test suis en mesure d'accéder aux données:
protected void rptDiscipline_ItemDataBound(Object Sender, RepeaterItemEventArgs e)
{
DataRowView drView = (DataRowView) e.Item.DataItem;
string name = drView["Name"] as string;
string link = drView["Link"] as string;
string notation = drView["Notation"] as string;
Response.Write(name + link + notation + "<br />")
}
Sorte que les données sont là, c'est exactement ce que je m'attends à le voir, je ne peux pas le faire lié à l'intérieure de la répétition. Si il est plus performant de manière à atteindre le même, je suis heureux de retravailler ma solution.
qu'essayez-vous de se lier à l'intérieur de la répétition? peut-être poster à la classe de liaison à l'extérieur de répétition.
édité ma question, j'espère que ça clarifie mon problème
OriginalL'auteur Nathan | 2011-05-30
Vous devez vous connecter pour publier un commentaire.
Sur le contrôle externe, utilisez l'événement ItemDataBound, comme ceci:
Ensuite, dans le code-behind, gérer la rptDiscipline_ItemDataBound événement manuellement et de lier l'intérieur de répétition. Le répéteur est ItemDataBound événement se déclenche une fois pour chaque élément qui se répète. Donc, vous allez faire quelque chose comme ceci:
EDIT: mis à Jour pour correspondre à votre question de la mise à jour.
Vous devez lier l'extérieur répéteur à une source de données qui n'a qu'un seul enregistrement par élément que vous souhaitez que la répétition à rendre. Cela signifie que la source de données doit être une collection de/liste/datatable/etc que n'a que les disciplines. Dans votre cas, je vous recommande l'obtention d'un
List<string>
de disciplines de la DataTable pour l'intérieur de la collection, et de le lier à l'extérieur de répéteur. Puis, à l'intérieur de répéteur se lie à un sous-ensemble de données dans la Table de données, à l'aide de l'événement ItemDataBound. Pour obtenir le sous-ensemble, le filtre de la DataTable dans un DataView.Voici le code:
Salut @charlie - je vois ce que tu veux dire, mais ne peut pas le faire fonctionner. Pouvez-vous revenir sur votre réponse?
Oui, il peut, voir @lomaxx réponse
c'est absolument magnifique. J'étais trop concentré sur la liaison le seul datatable plutôt que de créer de la discipline de la liste aussi, malgré le fait de voir beaucoup de sql exemples à l'aide de deux tables avec une relation définie. Vraiment, pour vraiment apprécier les conseils sur ce point, le présent code entrera en incroyablement utile dans l'avenir.
OriginalL'auteur Charlie Kilian
Si vous ne voulez pas le faire sur le ItemDataBound événement, vous pouvez également le faire en ligne dans votre page par liaison à un enfant de la propriété de l'élément parent si l'enfant de la propriété est une collection comme:
OriginalL'auteur lomaxx
D'abord vous avez besoin de deux listes, la liste des disciplines, et ensuite la liste de toutes vos données.
Lier des données la liste des disciplines à l'extérieur de répétition. Si il y a 6 disciplines, le relais doit se répéter 6 fois.
Je crois que je comprends votre problème maintenant... j'ai posté quelques psudo code
OriginalL'auteur EdmundYeung99