如何在GridView中实现条件格式

Mat*_*ser 5 .net c# gridview asp.net-2.0

我的aspx页面上有一个GridView,它显示由以下类定义的对象集合

public class Item
{
    public string ItemName{get; set;}
    public object ItemValue{get; set;}
}
Run Code Online (Sandbox Code Playgroud)

然后在我的aspx标记中我有这样的东西

<asp:GridView ID="MyTable" runat="server">
    <Columns>
        <asp:BoundField DataField="ItemName" />
        <asp:BoundField DataField="ItemValue" />
    </Columns>
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)

我想知道的是:
有没有办法在ItemValue字段上使用条件格式,这样如果对象持有字符串,它将返回不变的字符串,或者如果它保持DateTime,它将显示为DateTime.ToShortDateString( ).

Pau*_*and 12

不确定是否可以使用BoundField,但如果将其更改为TemplateField,则可以使用此链接中的格式化函数.

即类似的东西

<%# FormatDataValue(DataBinder.Eval(Container.DataItem,"ItemValue")) %>
Run Code Online (Sandbox Code Playgroud)

然后在您的代码隐藏中,您可以添加受保护的函数

Protected Function FormatDataValue(val as object) As String
    'custom enter code hereformatting goes here
End Function
Run Code Online (Sandbox Code Playgroud)

或者您可以在gridview的OnRowCreated事件中执行某些操作,就像在此链接中一样

<asp:GridView ID="ctlGridView" runat="server" OnRowCreated="OnRowCreated" />
Run Code Online (Sandbox Code Playgroud)

此函数是基于datavalue是否为null /为double的条件格式

protected void OnRowCreated(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        DataRowView drv = e.Row.DataItem as DataRowView;
        Object ob = drv["ItemValue"];


        if (!Convert.IsDBNull(ob) )
        {
            double dVal = 0f;
             if (Double.TryParse(ob.ToString(), out dVal))
             {
                 if (dVal > 3f)
                 {
                     TableCell cell = e.Row.Cells[1];
                     cell.CssClass = "heavyrow";
                     cell.BackColor = System.Drawing.Color.Orange;
                 }
             }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)