动态生成WebControls.Table的换行

来源:互联网 发布:steam的mac游戏推荐 编辑:程序博客网 时间:2024/05/18 01:35

昨天做了一个用户权限的列表时,遇到了一个事情,生成的表的单元格个数超过每一行的个数时,
需要换行.因为表格是根据数据库的内容自动生成,就需要有一段代码来控制换行.本来也不算什
么大问题,结果搞了半天,钻到死胡同了.最后还是同事指点,才恍然明白;特此记录:

private void GetFunc(int ModuleId)
  { 
int tableColumn=5;
int i=0;
  Table t=new Table();  
  TableRow r=new TableRow(); 
   using(SqlDataReader dr=Module.GetFuncByModule(ModuleId))
   {     
    while(dr.Read())
    {
     if(i%tableColumn!=0 || i==0)
     {
      CheckBox chkA=new CheckBox();
      string func_id=dr["func_id"].ToString();
      string funcName=dr["funcName"].ToString();
      chkA.Text=funcName;
      chkA.ID=func_id.ToString();
      if(sd.Count>0)
      {
       string  v=sd[func_id];
       if(v=="True")
       {
        chkA.Checked=true;
       }
       if(v=="False")
       {
        chkA.Checked=false;
       }
     
      }
      if(selectAccId!="")
      {
       chkA.Attributes.Add("onclick","checkPermiss(this,'"+selectAccId+"');");
      }
      TableCell c=new TableCell();
      chkA.CssClass="permiss_funcName";
      //c.CssClass="permiss_td";
      c.Controls.Add(chkA);     
      r.Cells.Add(c); 
      
     }
     else
     {
      r=new TableRow(); //XXXXXX赋值XXXXX
     }
     i++;
     if(i%tableColumn==0 && i!=0)
     {
      t.Rows.Add(r);
     }
    } 
    t.Rows.Add(r);
}
}
仔细想想,主要是对TableRow的赋值的地方搞糊涂了,我想如果再次赋值,那原先的那个对象不久
成空悬的了,就像空悬指针一样,所以我连想都没敢想再次赋值.其实r是对象的引用,不是对象的指
针,看来c++的引用概念没明白啊.
另外这个结构让我想起来递归的实现.看来算法还是很重要啊.

原创粉丝点击