我正在寻找一种方法,根据数据绑定项的属性,有选择地将CSS类应用于 GridView 中的各个行。

e.g:

GridView的数据源是 SummaryItems 的通用列表, SummaryItem 具有属性 ShouldHighlight 。当 ShouldHighlight == true 时,相关行的CSS应设置为突出显示

任何想法?

有帮助吗?

解决方案

非常容易

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        DataRowView drv = e.Row.DataItem as DataRowView;
        if (drv["ShouldHighlight"].ToString().ToLower() == "true")
            e.Row.CssClass = "highlighted";
    }
}

如果您使用 DataTable作为DataSource

,则上述代码有效

更改为:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        myClass drv = (myClass)e.Row.DataItem;
        if (drv.ShouldHighlight)
            e.Row.CssClass = "highlighted";
    }
}

仅用于上面使用泛型时的示例:

public class myClass
{ 
    public Boolean ShouldHighlight
    { get; set; }
}

如果您正在使用泛型(列表,词典等)

请记住:

e.Row.dataItem

始终返回您填充行的整个对象,因此可以从此处轻松操作网页中数据的外观。

您应该使用RowDataBound事件,该事件将在数据附加到行对象后触发但尚未在页面中写入HTML代码,这样您就可以检查ShouldHighlight值(我转换为字符串因为我没有知道类型,如果你知道它是一个布尔值,你可以改变它。)

这段代码的运行速度比megakemp代码要快得多,因为你没有创建一个List对象,并且每行都填充了整个数据源......

P.S。参加查看本网站,您可以使用GridView对象找到几个项目教程

其他提示

您要记住的一件事是在RowCreated或RowDataBound事件处理程序中设置Row.CssClass属性将覆盖您在网格级别应用的任何默认样式。 GridView使您可以通过以下属性轻松访问行样式:

gvGrid.AlternatingRowStyle.CssClass = ALTROW_CSSCLASS
gvGrid.RowStyle.CssClass = ROW_CSSCLASS

但是,当您将CssClass值分配给特定行时,在这种情况下需要,分配会在网格级别上覆盖任何顶级分配。作业不会“级联”。我们可能会喜欢他们。因此,如果您想要保留顶级类赋值并且还要自己构建一个更具体的类,那么您需要检查rowState以查看您正在处理的行类型并相应地连接您的类名

If(item.ShouldHighlight)
 {
    If(e.Row.RowState == DataControlRowState.Alternate)
    {
        e.Row.CssClass = String.Format("{0} {1}", "highlight", ALTROW_CSSCLASS)
    }
    else
    {
        e.Row.CssClass = String.Format("{0} {1}", "highlight", ROW_CSSCLASS)
    }


}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top