J'ai un contrôle de répéteur qui génère une liste de liens à partir d'un SqlReader. J'essaie de créer un bouton à côté de chaque lien qui permettra à l'utilisateur de supprimer ce lien. Ma pensée originale était d'utiliser l'expression <% # Eval ("URL")%> dans le modèle d'élément comme ci-dessous. Cependant, le CommandArgument dans la méthode ItemCommand reviendrait toujours vide.SqlReader, commandes Repeater et problème CommandArgument
<asp:Repeater ID="rptLinks" runat="server" onitemdatabound="rptLinks_ItemDataBound"
onitemcommand="rptLinks_ItemCommand">
<ItemTemplate><a href="<%# DataBinder.Eval(Container.DataItem, "URL") %>" target="_blank"><%# DataBinder.Eval(Container.DataItem, "URL") %></a><asp:ImageButton visible="false" ID="btnDeleteLink" runat="server" ImageUrl="/Images/DeleteIcon.gif" CommandName="DELETE" CommmandArgument=<%#Eval("URL") %> />
</ItemTemplate>
<SeparatorTemplate><br /></SeparatorTemplate>
</asp:Repeater>
La prochaine chose que j'ai essayé était d'utiliser l'événement ItemDataBound pour définir le programatically CommandArgument, mais je ne peux pas savoir quoi jeter le e.Item.DataItem dans afin que je puisse faire référence à la [ « URL » ] Article.
protected void rptLinks_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
ImageButton btnDelete;
btnDelete = (ImageButton) e.Item.FindControl("btnDeleteLink");
if (btnDelete != null)
{
btnDelete.Visible = (bool)ViewState["LinkEditing"];
string URL = ((WhatTypeGoesHere)(e.Item.DataItem))["URL"].ToString();
btnDelete.CommandArgument = URL;
}
}
Juste un commentaire: Ne devrait-il pas être possible d'obtenir la valeur ["URL"] sans connaître le type de la source de données? Disons à l'avenir que je veux changer la source de données en une structure datatable ou xml, n'y a-t-il pas moyen d'écrire le code ItemDataBound pour qu'il soit agnostique et fonctionne avec n'importe quelle source de données? – Aheho
J'ai mis à jour ma réponse pour expliquer pourquoi cela n'est pas en cause ici. En gros, vous n'attachez pas votre code ItemDataBound à votre source de données, mais à votre objet. –