在后面的代码中基于bool更改CssClass

时间:2016-04-05 15:12:49

标签: c# asp.net

我有多个TemplateFields,其中每个CssClass包含两个我希望根据代码隐藏文件中的布尔isGov更改的label

如下所示,我在.aspx文件中有一个if / else语句,使用相同的headertemplate {{1}来更改booleanisGov的文本我想用来改变CssClass。但是,使用相同的概念不起作用。我想知道这样做的正确方法是什么?

这是当前的代码,我试图改变的两个CssClass是最后两个:

<asp:TemplateField HeaderText="SUN">
            <footertemplate>
                <asp:Label ID="lblD1F" runat="server" ForeColor="white" Width="35px" Text="<%# GetTotal(0).ToString() %>" />
            </footertemplate>
            <headertemplate>
                <asp:Label ID="lblD1H" runat="server" CssClass="hdr_Day" >
                <% if (isGov) { %> 
                MON
                <% } else { %>
                SUN
                <% } %>                 
                </asp:Label><br />
                <asp:Label ID="lblD1D" runat="server" CssClass="hdr_Date" Text='<%# _displayDate.ToString("MM/dd") %>'></asp:Label>                
            </headertemplate>
            <itemtemplate>
                <anthem:TextBox id="tbDay1" 
                                runat="server" 
                                Text='<%# Bind("Day1") %>'  
             ---> This one      CssClass="tbWeekEnd" 
                                AutoCallBack="true"  />
                <asp:Label ID="lblDay1" runat="server" Visible="false" Text='<%# Bind("Day1") %>'></asp:Label>

            </itemtemplate>
            <itemstyle cssclass="cell_weekend" /> <--- And this one
        </asp:TemplateField>

我也尝试过:

CssClass='<%# isGov ? "cell_weekday" : "cell_weekend" %>'

似乎没有识别布尔isGov。当我使用if语句时,Intellisense会选择它,但在尝试更改CssClass时则不会。

编辑:基本上发生了什么,网格视图包含一些列,其中14列在标题列中有一个日期。日期根据bool isGov从周日或周一开始,CssClass突出显示周末。所以我想改变基于bool的CssClass,但仅​​限于属于周末细胞的细胞。

2 个答案:

答案 0 :(得分:2)

此处的问题是无法使用数据绑定值初始化ItemStyle元素。正确的方法是处理GridView的RowDataBound事件并在那里设置类:

protected void GridViewID_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        // if you want the whole row class
        e.Row.CssClass = isGov ? "cell_weekday" : "cell_weekend";

        // if you want specific cell class
        e.Row.Cells[2] = isGov ? "cell_weekday" : "cell_weekend";
    }
}

单元格索引基于0,对应于标记中定义的列顺序。

至于TextBox的类,它应该像你使用<%# isGov ? ...一样运行。但是不要指望intellisense在这里提供帮助 - 请注意你在字符串中编写代码,所以从IDE的角度来看,这只是一个字符串值(除非在VS的最新版本中内置了一些很酷的功能,我没有听说过)< / p>

答案 1 :(得分:1)

如您所发现,您无法使用属性中的服务器标记(&lt;%...%&gt;)在ASP.NET控件(&lt; asp:...&gt;)上设置属性。相反,您可以添加一行代码来设置CssClass属性:

<% lblD1H.CssClass = isGov ? "cell_weekday" : "cell_weekend"; %>

编辑:如果这不起作用(因为在模板中),您可以尝试使用纯HTML而不是ASP标签:

<label id="lblD1D" class='<%# isGov ? "cell_weekday" : "cell_weekend" %>'>
    <%# _displayDate.ToString("MM/dd") %>
</label>