Asp.net 选择性地将css应用于gridview中的行
我正在寻找一种方法,根据数据绑定项的属性,将CSS类选择性地应用于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) {
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中不存在。你可以发布代码示例,或者提出一个新问题并在这里删除链接,这样我就可以看到它吗?这是一个非常老的问题,但我有类似的问题,这个答案有帮助。谢谢