0

看下图我想计算最后一列(cnt)的值我正在使用转发器控件。

例子:

if (last column (cnt) is greater than 5> )
{
    response.write ("6");
}

sql查询

在此处输入图像描述

 SELECT id, category, ( SELECT COUNT(id) FROM entry_table WHERE category.id = entry_table.Cat_id) as cnt FROM category

中继器代码

<asp:Repeater ID="CloudTags" runat="server"  OnItemDataBound="CloudTags_ItemDataBound">
    <ItemTemplate>
        <asp:HyperLink ID="HyperLink9" runat="server">
             <%#DataBinder.Eval(Container,"DataItem.Category")%>
            (<%#DataBinder.Eval(Container,"DataItem.cnt")%>)
        </asp:HyperLink>
    </ItemTemplate>
</asp:Repeater>

后面的代码

protected void CloudTags_ItemDataBound(object sender, RepeaterItemEventArgs e)
{

}
4

1 回答 1

1

您可以执行以下操作:

protected void CloudTags_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    var repeaterItem = e.Item;
    // TODO you still have to check the type of the repeaterItem
    var dataItem = (dynamic) repeaterItem.DataItem;
    var cnt = dataItem.cnt;
    if (cnt > 5)
    {
        var hyperLink = (HyperLink) repeaterItem.FindControl("HyperLink9");
        hyperLink.CssClass = "TagSize2";
    }
}

或者

protected void CloudTags_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    var repeaterItem = e.Item;
    // TODO you still have to check the type of the repeaterItem
    var dataItem = repeaterItem.DataItem;
    var objCnt = DataBinder.Eval(dataItem, "cnt");
    // TODO check the whole parsing/converting stuff ...
    var stringCnt = objCnt.toString();
    var cnt = int.Parse(stringCnt);
    if (cnt > 5)
    {
        var hyperLink = (HyperLink) repeaterItem.FindControl("HyperLink9");
        hyperLink.CssClass = "TagSize2";
    }
}

无论如何,我强烈建议您不要使用dynamicDataBinder.Eval.Data-property 强制转换为强类型!否则,这将导致一些花哨的运行时反射,并对性能产生影响!

于 2014-08-25T06:51:51.680 回答