日期:2014-05-19  浏览次数:20459 次

开发用户控件丢失样式问题, 请进来看一下[急!!!!!]
我在开发用户控件时,   在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等属性.