昨天做了一个用户权限的列表时,遇到了一个事情,生成的表的单元格个数超过每一行的个数时,
需要换行.因为表格是根据数据库的内容自动生成,就需要有一段代码来控制换行.本来也不算什
么大问题,结果搞了半天,钻到死胡同了.最后还是同事指点,才恍然明白;特此记录:
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++的引用概念没明白啊.
另外这个结构让我想起来递归的实现.看来算法还是很重要啊.