Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 选择性地将css应用于gridview中的行_Asp.net_Gridview - Fatal编程技术网

Asp.net 选择性地将css应用于gridview中的行

Asp.net 选择性地将css应用于gridview中的行,asp.net,gridview,Asp.net,Gridview,我正在寻找一种方法,根据数据绑定项的属性,将CSS类选择性地应用于GridView中的各个行 e、 g: GridView的数据源是SummaryItems的通用列表,并且SummaryItem具有属性shouldlhighlight。当shouldlhighlight==true时关联行的CSS应设置为高亮显示 有什么想法吗?很简单 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {

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

e、 g:

GridView的数据源是
SummaryItems
的通用列表,并且
SummaryItem
具有属性
shouldlhighlight
。当
shouldlhighlight==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";
    }
}
如果使用数据表作为数据源,则上述代码有效

改为:

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事件,该事件将在数据附加到row对象但尚未在页面中写入HTML代码后触发,这样您可以检查ShouldHighlight值(我转换为字符串,因为我不知道类型,如果知道它是布尔值,您可以更改它)

此代码的运行速度比megakemp代码快得多,因为您并没有创建列表对象并为每一行填充整个数据源


顺便说一句,您可以使用GridView对象为您的项目找到多个教程。

您要记住的一件事是,在RowCreated或RowDataBound事件处理程序中设置Row.csClass属性将覆盖您可能在网格级别应用的任何默认样式。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)
    }


}

谢谢你!我曾经有过这样的想法,但后来又消除了它,因为我假设html已经生成了(假设我真的应该尝试过)这是我在dataGridView中归档修改的最好方法,请记住,您可以使用(如果ItemTemplate中有Label1)和:(Label)来获取模板中已经放置的对象e、 Row.FindControl(“Label1”).Text=dvr.myPropertyText;这对我不起作用=|在调试时,我看到类被分配了,但在呈现的HTMLC中不存在。你可以发布代码示例,或者提出一个新问题并在这里删除链接,这样我就可以看到它吗?这是一个非常老的问题,但我有类似的问题,这个答案有帮助。谢谢