【问题标题】:Selectively apply css to a row in a gridview有选择地将css应用于gridview中的一行
【发布时间】:2010-09-17 12:10:02
【问题描述】:

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

例如:

GridView 的数据源是SummaryItems 的通用列表,SummaryItem 有一个属性ShouldHighlight。当 ShouldHighlight == true 时,关联行的 CSS 应设置为 highlighted

有什么想法吗?

【问题讨论】:

    标签: asp.net gridview


    【解决方案1】:

    很简单

    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 作为数据源

    ,上面的代码可以工作

    改为:

    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 对象并为每一行填充整个数据源...

    附注采取look at this website,您可以使用 GridView 对象为您的项目找到几个教程

    【讨论】:

    • 谢谢!我已经考虑过这个想法但打消了它,因为我假设已经生成了 html(假设我应该真的尝试过)
    • 这是我在 dataGridView 中存档修改的最佳方式,请记住,您始终可以使用(如果您在 ItemTemplate 中有 Label1)获取模板中已放置的对象:(Label)e .Row.FindControl("Label1").Text = dvr.myPropertyText;
    • 它对我不起作用 =|在调试时,我看到该类已分配,但在呈现的 HTML 中不存在
    • 你能发布你的代码示例,或者提出一个新问题并将他的链接放在这里以便我看到它吗?
    【解决方案2】:

    您要记住的一件事是,在 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)
        }
    
    
    }
    

    【讨论】:

    • 这是一个非常古老的问题,但我有类似的问题,这个答案有帮助。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 2021-07-05
    • 2011-06-17
    相关资源
    最近更新 更多