Répéteur Répéteur
J'ai un répéteur à l'intérieur d'un répéteur. Lorsque le parent répéteur est lié à un Datatble
qui a une colonne avec un Datatable
en elle.
Je voudrais lier l'enfant répétiteur à la table de données de la colonne dans le parent repeater datarow
Est-ce possible? je pensais que je pouvais le faire directement dans le aspx
fichier comme:
DataSource="<%# DataBinder.Eval(Container.DataItem, "Products")%>"
mais il ne semble pas fonctionner.
Vous devez vous connecter pour publier un commentaire.
Dans le parent de la répétition, joindre une méthode pour la OnItemDataBound de l'événement et dans la méthode, trouver imbriquées répétiteur de données et de liaison.
Exemple (.aspx):
Exemple (.cs):
DataBinding
événement à la place. 🙂if (args.Item.ItemType == ListItemType.Item || args.Item.ItemType == ListItemType.AlternatingItem)
sinon le code n'est pas lancé pour chaque deuxième élément.Je voudrais ajouter une liaison de données de l'événement à l'enfant de la répétition elle-même:
Puis il suffit de le mettre en œuvre:
Je préfère le faire au niveau de contrôle au lieu de la
ItemDataBound
niveau de sorte que, si jamais vous avez à supprimer les contrôles ou les éléments à l'intérieur de vos modèles, vous n'avez pas à vous soucier de la recherche de code dans les contrôles parent qui l'utilisent. Elle est de toutes les localiser witht le contrôle de lui-même. Plus jamais vous n'aurez à faire unFindControl
.Si vous souhaitez remplacer un contrôle dans le futur, vous pouvez simplement le supprimer et de votre code fonctionne toujours car c'est tous les contenus eux-mêmes. À l'aide de la
ItemDataBound
serait la cause de votre code pour toujours compiler mais crash ou d'agir de façon inattendue lors de l'exécution en raison de sa dépendance sur les contrôles enfants.Eval
fonction. Je vais mettre à jour ma réponse à montrer un exemple.rep.DataSource = (DataTable)(Eval("yourColumnWithTableInIt"))
. Vous devez être en mesure d'obtenir laDataTable
de votre source de données d'origine.DataBinding
est de travail. Vous appelezDataBind
sur le haut niveauRepeater
et qui contient un autreRepeater
vous de mettre en œuvre laOnDataBinding
à l'intérieurRepeater
de sorte que quand ils haut niveau de l'un est lié, lesOnDataBinding
pour l'intérieure de la répétition des incendies et puis vous vous liez l'intérieurRepeater
élément par élément de laOnDataBinding
événement. J'ai editted en réponse à la rendre plus évident.DataBind()
provoque une boucle infinie; ASP semble seulement besoin de laDataSource
d'être ensemble, sans explicitementDataBind()
, afin de travailler à l'intérieur de la imbriquéeRepeater
.Ici est de savoir comment il est fait:
Donc si vous connaissez la colonne dans la table parent qui détient la table enfant/source de données pour le sous-répéteur, vous pouvez mettre directement dans le fichier aspx.
Si j'ai besoin de le faire, j'ai l'habitude de le faire à l'aide de la ItemDataBound cas de la mère de répéteur pour lier l'enfant répéteur. Si e est de votre EventArgs paramètre, vous aurez accès à l'enfant répéteur via e.De l'élément.FindControl(), et l'accès aux données par le biais de l'e.De l'élément.DataItem.
Repeater1 OnItemDataBound événement, puis FindControl Repeater2. Le code-behind ne trouverez pas imbriquée Repeater2! Vous devez utiliser FindControl("Repeater2").
Voici un exemple de comment faire ceci:
Article pour imbriquée contrôle repeater