根据switch语句为asp:Label分配值

时间:2015-01-19 07:35:17

标签: c# asp.net gridview switch-statement templatefield

我正在尝试将GridView的单元格作为图标和字符串的组合,到目前为止这是我的代码

            <asp:GridView ID ="GV1" CssClass="myClass1" runat = "server" AutoGenerateColumns="false" GridLines="None">
            <Columns>
                <asp:TemplateField HeaderText="Status">
                    <ItemTemplate>
                        <asp:Label ID="StatusCustomized" runat="server" Text='<%# (Eval("Status").Equals("Rejected") ? "<i class=\"fa fa-check-circle\"></i> " : "<i class=\"fa fa-times-circle\"></i> ")+Eval("Status")%>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>

但这仅适用于一种情况,所以我正在考虑为Eval(“状态”)使用switch语句,但我一直得到(无效的表达术语'switch'),也许是因为我没有实际上分配Text属性,我只是将文本放在案例中。

请帮助我,我会很感激,

谢谢。

2 个答案:

答案 0 :(得分:1)

如评论所述,您可以使用代码隐藏。适当的事件是RowDataBound事件:

protected void GV1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        Label StatusCustomized = (Label) e.Row.FindControl("StatusCustomized");
        DataRow row = ((DataRowView)e.Row.DataItem).Row; // change type of DataSource if necessary
        string status = row.Field<string>("Status");
        switch(status)
        {
            case "Rejected":
                StatusCustomized.Text = "your text";
                break;
        }
    }
}

答案 1 :(得分:0)

您可以向Label添加多个ItemTemplate控件,并根据所需条件设置其Visible属性,例如:

<asp:Label Visible='<%# Eval("Status").ToString().Equals("Rejected") %>'
           Text="<i class=\"fa fa-check-circle\"></i>" ... />
<asp:Label Visible='<%# Eval("Status").ToString().Equals("StatusX") %>'
           Text="alternate text" ... />
<asp:Label Visible='<%# Eval("Status").ToString().Equals("StatusY") %>'
           Text="yet another text" ... />

(注意使用单引号字符Visible='<%# ... %>'

或者不使用标签,您还可以添加其他元素,例如DIV以获得更清晰的标记:

<div runat="server" Visible='<%# Eval("Status").ToString().Equals("Rejected") %>'
    <i class="fa fa-check-circle"></i>
</div>

我比其他答案更喜欢这个解决方案,因为它不会在代码隐藏中放置/隐藏部分标记。