我正在尝试将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属性,我只是将文本放在案例中。
请帮助我,我会很感激,
谢谢。
答案 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>
我比其他答案更喜欢这个解决方案,因为它不会在代码隐藏中放置/隐藏部分标记。