DataList, dichiarazioni condizionali in < ItemTemplate > ;?
Domanda
Sto provando a fare quanto segue in ASP.NET 3.5. Fondamentalmente, sto associando un LINQDataSource a un DataList. C'è una proprietà chiamata " Deleted " e se è vero, voglio visualizzare markup diversi. Il codice seguente genera errori:
<asp:DataList runat="server">
<ItemTemplate>
<% If CBool(Eval("Deleted")) Then%>
...
<% Else%>
...
<% End If%>
</ItemTemplate>
</asp:DataList>
È possibile? In caso contrario, quali sono le alternative?
Soluzione
Perché non usare semplicemente l'evento RowDataBound e controllare il valore dei tuoi campi? RowDatabound è ideale per queste situazioni in cui si desidera modificare i dati in una visualizzazione griglia in base ai valori nel set di risultati.
Altri suggerimenti
Potrei suggerire di mantenere il code-lean snello e scrivere il testo desiderato tramite un risultato di funzione:
<asp:DataList runat="server">
<ItemTemplate>
<%# GetText(Container.DataItem) %>
</ItemTemplate>
</asp:DataList>
E il code-behind:
protected static string GetText(object dataItem)
{
if (Convert.ToBoolean(DataBinder.Eval(dataItem, "Deleted"))
return "Deleted";
return "Not Deleted";
}
Spero che sia d'aiuto.
Un'opzione come soluzione alternativa sarebbe quella di utilizzare un pannello.
<asp:DataList runat="server">
<ItemTemplate>
<asp:Panel Visible="<%# Eval("Deleted") %>">
...(deleted content here)...
</asp:Panel>
<asp:Panel Visible="<%# Not Eval("Deleted") %>">
...(other content here)...
</asp:Panel>
</ItemTemplate>
</asp:DataList>
Forse usa l'evento ItemDataBound di un datalist. Per gridview è l'evento rowdatabound che è l'ideale per alterare la visualizzazione di valori basati su altri valori nel set di risultati. Evento ItemDataBound
Quindi, fondamentalmente sul database degli oggetti, puoi giocare con i tuoi condizionali. Ancora una volta, questa è un'ipotesi istruttiva poiché in genere l'ho fatto con l'evento RowDataBound su gridview.