我在开发用户控件时, 在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?

解决方案 »

  1.   

    你这个table有没有数据?
    如果没有数据就会这样
      

  2.   

    tr.ApplyStyleSheetSkin(Page);试一下
      

  3.   

    是否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之中
      

  4.   

    foreach(TableRow tr in parent.Rows)
    中TableRow类, Render方法重写了, 但实现中没有设置CssClass等属性.