开发用户控件丢失样式问题, 请进来看一下[急!!!!!]
我在开发用户控件时, 在Render方法里面给子控件集设置属性(如样式属性等).
protected override void Render(HtmlTextWriter writer)
{
Table parent = (Table)Controls[0];
parent.BackColor = this.BackColor;
parent.BorderStyle = this.BorderStyle;
parent.BorderColor = this.BorderColor;
foreach(TableRow tr in parent.Rows)
{
tr.CssClass = this.CSS_ItemDefaultClass;
if(this.CSS_ItemMouseOverClass + String.Empty != String.Empty)
{
tr.Attributes.Add
( "onmouseover ", "this.className= ' "+this.CSS_ItemMouseOverClass+ " '; ");
}
tr.BorderWidth = Unit.Pixel(100);
}
}
但运行结果, parent表格控件的属性是起效了, 但tr表格行控件设置的任何属性,
都将丢失掉(在运行页面中查看源代码, 没有设置这些属性, 只有一个无任何属性和样式的 <tr> 标记). 即, foreach语句里面的语句无效, 但foreach外面的语句起效.
说明一下: 上面代码跟踪调试都能够执行到, 并且不存在CSS文件路径等错误.
并且同样的代码在自定义控件(不是用户控件)中是可以起效的.
为什么在用户控件中不行? 有没有人也遇到这种情况, 是不是用户控件的Bug?
------解决方案--------------------没碰过
------解决方案--------------------你这个table有没有数据?
如果没有数据就会这样
------解决方案--------------------tr.ApplyStyleSheetSkin(Page);
试一下
------解决方案--------------------是否Child的render方法发生
在parent的render之前,如果这样,你把这个
foreach(TableRow tr in parent.Rows)
{
tr.CssClass = this.CSS_ItemDefaultClass;
if(this.CSS_ItemMouseOverClass + String.Empty != String.Empty)
{
tr.Attributes.Add
( "onmouseover ", "this.className= ' "+this.CSS_ItemMouseOverClass+ " '; ");
}
tr.BorderWidth = Unit.Pixel(100);
}
}
写到control的onload之中
------解决方案--------------------d
------解决方案--------------------foreach(TableRow tr in parent.Rows)
中TableRow类, Render方法重写了, 但实现中没有设置CssClass等属性.