DataList,<itemtemplate>中的条件语句?</itemtemplate>

时间:2008-11-05 05:28:25

标签: asp.net datalist

我试图在ASP.NET 3.5中执行以下操作。基本上,我将LINQDataSource绑定到DataList。有一个名为“Deleted”的属性,如果是,我想显示不同的标记。以下代码引发错误:

<asp:DataList runat="server">
    <ItemTemplate>
        <% If CBool(Eval("Deleted")) Then%> 
            ...
        <% Else%>
            ...
        <% End If%>
    </ItemTemplate>
</asp:DataList>

这可能吗?如果没有,有哪些替代方案?

4 个答案:

答案 0 :(得分:10)

我可能会建议保持代码前端精简并通过函数结果写出所需的文本:

<asp:DataList runat="server">
    <ItemTemplate>
         <%# GetText(Container.DataItem) %>
    </ItemTemplate>
</asp:DataList>

代码隐藏:

protected static string GetText(object dataItem)
{        
    if (Convert.ToBoolean(DataBinder.Eval(dataItem, "Deleted"))
        return "Deleted";

    return "Not Deleted";
}

我希望它有所帮助。

答案 1 :(得分:5)

作为解决办法的一个选择是利用小组。

<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>

答案 2 :(得分:1)

为什么不直接使用RowDataBound事件并检查字段的值呢? RowDatabound非常适合您希望根据结果集中的值更改网格视图中的数据的情况。

RowDataBound Event from MSDN

答案 3 :(得分:1)

也许使用datalist的ItemDataBound事件。对于gridview,它的rowdatabound事件非常适合根据结果集中的其他值更改值的显示。 ItemDataBound event

所以基本上在itemdatabound上你可以玩你的条件。同样,这是一个有根据的猜测,因为我通常使用gridview的RowDataBound事件完成此操作。