Hello world.

预览效果图:

 

数据库结构:

id(int)    classname(string)   parentid(int) sort(int用于显示与排序)

1  家居  0  1

2  家电  0  2

3  沙发  1  1

4  某...   3      1

...

10   ...红色   4      1

 

 注:

parentid  父节点ID

sort 用于隐藏或显示 兼排序功能

 

前台:

 

<asp:Repeater ID="rep" runat="server" onitemdatabound="rep_ItemDataBound">
<HeaderTemplate></HeaderTemplate>
<ItemTemplate></ItemTemplate>
<FooterTemplate></FooterTemplate>
</asp:Repeater>

 

 

后台:

 

代码
public partial class 递归2 : System.Web.UI.Page
{
    
public List<cmodel> list;
    
protected void Page_Load(object sender, EventArgs e)
    {
        
if (!IsPostBack)
        {
            rules r 
= new rules();
            list 
= r.getlist();//读取数据库
            
this.rep.DataSource = list.Where(x => x.parentid == 0).ToList();//LINQ2OBJECT
            
this.rep.DataBind();
        }
    }

    
protected void rep_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        
if (e.Item.ItemType == ListItemType.Header)
        {
            Literal l 
= new Literal();
            l.ID 
= "ul";
            l.Text
="<ul>";
            e.Item.Controls.Add(l);
        }
        
else if (e.Item.ItemType == ListItemType.Footer)
        {
            Literal l 
= new Literal();
            l.ID 
= "ul2";
            l.Text 
= "</ul>";
            e.Item.Controls.Add(l);
        }
        
else if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            
int id = (int)DataBinder.Eval(e.Item.DataItem, "id");
            Literal li1 
= new Literal();
            li1.ID 
= "li1";
            li1.Text 
= "<li>";
            e.Item.Controls.Add(li1);

            Literal name 
= new Literal();
            name.ID 
= "n";
            name.Text 
= DataBinder.Eval(e.Item.DataItem, "classname").ToString();
            e.Item.Controls.Add(name);
            List
<cmodel> temp = list.Where(x => x.parentid == id).ToList();//LINQ2OBJECT
            
if (temp.Count > 0)
            {
                Repeater r 
= new Repeater();
                TemplateBuilder tb 
= new TemplateBuilder();
                tb.AppendLiteralString(
"");
                r.HeaderTemplate 
= tb;
                r.FooterTemplate 
= tb;
                r.ItemTemplate 
= tb;
                r.ItemDataBound 
+= new RepeaterItemEventHandler(rep_ItemDataBound); //递归核心
                r.DataSource 
= temp;
                r.DataBind();
                e.Item.Controls.Add(r);
            }
            Literal li2 
= new Literal();
            li2.ID 
= "li2";
            li2.Text 
= "</li>";
            e.Item.Controls.Add(li2);
        }
    }

}

 

 

使用到的类:

代码
public class rules
{
    DataClasses1DataContext dc 
= new DataClasses1DataContext();

    
public List<cmodel> getlist()
    {
        var q 
= from x in dc.ClassFJ
                
where x.sort > 0  //用于控制显示隐藏
                orderby x.sort    //兼职排序功能
                select new cmodel
                (
                    x.id,
                    x.className,
                    x.parentid
                );
        
return q.ToList<cmodel>();
    }
}

public class cmodel
{
    
public cmodel(int i,string n,int p)
    {
        id 
= i;
        classname 
= n;
        parentid 
= p;
    }
    
public int id { getset; }
    
public string classname { getset; }
    
public int parentid { getset; }
}

 

 

 

抛砖引玉,话不多讲。

 

作者:Ryan

来自:http://flysnow-z.cnblogs.com/

 

posted on 2010-11-09 11:11  Ryan.zhu  阅读(1407)  评论(4编辑  收藏  举报
come soon on