我有一个特定的控件gridview,我在其上应用特定的CSS文件,我想在我的.cs文件中的特定条件下更改此CSS,是否有那样做?
例如:
<ItemStyle CssClass ="normal"/>
我想在特定条件下更改.cs。
答案 0 :(得分:1)
您可以将<style>
标记及其必要的调整注入页面,而无需修改CSS文件。
只需在ASPX页面上创建一个文字控件,作为修改样式的占位符。从代码隐藏中,向文字渲染类似于以下内容:
Literal1.Text = "<style type=\"text/css\">.normal { background-color:red; }</style>";
...“normal”是您要修改的原始CSS类。 CSS的优点在于它首先应用所包含文件中设置的样式,然后在<style>
标签中明确指定的任何“覆盖”样式。
答案 1 :(得分:1)
您的样式 不在.css文件中:您可以将文件更改为.aspx,也可以创建一个HttpHandler来提供CSS。
答案 2 :(得分:1)
你必须得到这样的东西呈现给HTML页面。
<style type="text/css">
.itemstyle
{
/* whatever styles you need */
}
</style>
这可以覆盖CSS文件中的任何内容。一种选择是在ASPX页面上放置一个Literal控件:
<asp:Literal ID="litStyle" runat="server" />
并使用它从后面的代码中写出必要的样式:
litStyle.Text = "<style type=\"text/css\">.itemstyle{" + myStyles + "}</style>";
答案 3 :(得分:1)
最好的方法是在静态css文件中设置不同的类,并更改gridview在代码隐藏(.cs)中使用的这些类中的哪些类。通过这种方式,您仍然可以获得缓存的css并与视图(.aspx)完全分离的好处。
的CSS:
.normal { background-color:white; }
.alternate { background-color:#EEE; }
代码隐藏
var css = SomeLogic() ? "normal" : "alternate";
gridView.RowStyle.CssClass = css;
答案 4 :(得分:1)
好吧,控件不负责管理CSS源文件及其对页面的添加,因此,简单的答案是不,你不能那样做。
顺便说一下,有一些解决办法。
您可以通过添加服务器控件(例如,HtmlGenericControl)来包含来自控件的带有 style HTML元素的CSS文件,以及适当的属性和值,因此,如果容器控件需要某些特定的CSS文件,您可以在容器控件的生命周期中,在呈现它之前,将其添加到某些ASP的HTML头元素(标记为 runat =“server”属性)。 NET页面。
这样做的一个好方法应该是在web.config中创建一个配置部分,实现你自己的配置部分可能支持创建控件/页面和CSS样式表文件的依赖关系,所以,使用这种方法,你将能够在派生自System.Web.UI.Page类的实现中实现某些方法,该类可能会根据控件添加CSS文件:
<cssDependencies>
<control type="YourNamespace.YourControl" cssFile="~/Styles/Default/YourControlStyle.css" />
<cssDependencies>
然后,您的CustomPageBase将拥有自己的“AddControl”方法,该方法应该在一些可以在PreRender方法中迭代的集合中注册其类型,因此,您可以根据控件的类型添加CSS文件。
我只是给你一些想法! :)
EDIT&amp;注意: 无论如何,这种方法和您的目标可能在性能优化方面存在问题。
最佳优化网站应将所有需要的CSS合并为一个,因此浏览器应在页面渲染过程中加载一个而不是多个。
我相信将所有CSS文件合并为一个可以通过“CSS文件和控件类型方法”实现,我建议你这样做,因为如果你不这样做,你可以用几十页来结束风格元素。
你听说过DotLess项目吗?在这里查看:http://www.dotlesscss.org/也许它可以用更少的努力为您提供更好的方法!
答案 5 :(得分:1)
动态CSS通常不受欢迎。
您应该在CSS中定义两个(或更多)类,然后根据需要在PreRender事件(或客户端)脚本中设置元素的ClassName属性。
答案 6 :(得分:1)
您的意思是GridView吗?
它没有和ItemStyle属性。但它内部的列确实可以。
所以你可以使用:
gv.Columns[0].ItemStyle.CssClass = "RedItem";
DataGrid有一个ItemStyle属性:
dg.ItemStyle.CssClass = "MoreThanNormalClass";
从你的问题中不清楚你想改变什么......
CSS类:
<style>
.Normal{ background-color:Lime; }
.Warning{ background-color:Red; }
</style>
ASP.NET标记:
<asp:DataGrid runat="server" id="dg" onitemdatabound="dg_ItemDataBound" >
<ItemStyle CssClass="Normal" />
</asp:DataGrid>
C#代码背后:
protected void Page_Load(object sender, EventArgs e)
{
int[] someInts = { 1, 15, 20 };
dg.DataSource = someInts;
dg.DataBind();
}
protected void dg_ItemDataBound(object sender, DataGridItemEventArgs e)
{
if (e.Item.DataItem != null)
{
int v = (int)e.Item.DataItem ;
if (v > 10 && v < 20)
e.Item.CssClass = "Warning";
}
}
输出: