J'ai suivi le post suivant sur l'utilisation de plusieurs ItemTemplates dans un contrôle ListView. Alors que cet exemple produit des résultats, j'essaie de comprendre comment passer un objet à travers le contrôle utilisateur de ItemTemplate, ce que je ne suis pas capable de faire/comprendre.Transférer l'objet à ListView ItemTemplate chargé dynamiquement
protected void lvwComments_OnItemCreated(object sender, ListViewItemEventArgs e)
{
ListViewDataItem currentItem = (e.Item as ListViewDataItem);
Comment comment = (Comment)currentItem.DataItem;
if (comment == null)
return;
string controlPath = string.Empty;
switch (comment.Type)
{
case CommentType.User:
controlPath = "~/layouts/controls/General Comment.ascx";
break;
case CommentType.Official:
controlPath = "~/layouts/controls/Official Comment.ascx";
break;
}
lvwComments.ItemTemplate = LoadTemplate(Controlpath);
}
L'utilisateur contrôle est la suivante:
public partial class OfficialComment : UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
Dans l'exemple, les valeurs sont émis dans la page ascx:
<%# Eval("ItemName") %>
mais je besoin d'accéder à la ListItem dans ce contrôle pour faire une autre logique. Je n'arrive pas à comprendre comment envoyer mes commentaires. L'objet émetteur et EventArgs ne contiennent pas les informations.
EDIT: Idéalement, je voudrais obtenir une explication quant à la façon dont le contrôle accède au dataitem lorsque vous utilisez le <% # Eval%> déclaration. Ce que j'ai pu déterminer, est le moyen suivant pour accéder à l'élément actuel:
J'ai créé un contrôle ListView personnalisé, qui définit le dataItemIndex sur ItemCreating.
Dans mon contrôle commentaire officiel, j'ajouter ce qui suit:
List<Comment> commentList = ((CommentListView)this.Parent.Parent.Parent).DataSource as List<Comment>;
if (commentList != null)
{
int currentIndex = ((ListViewDataItem)this.Parent).DataItemIndex;
Comment currentItem = commentList[currentIndex];
}