LINQ做无限级菜单

  到安博也有2个星期了,也学到了很多东西,不仅仅是技术方面的,也有我们生活当中并未注意的。

  好比是老赵那句签名,先学做人,在做技术 ,然后做程序员。

  走出校门,越发感觉自己的肤浅。

  以后的路还长着呢。

 

  在安博初识LINQ,感觉LINQ用起来挺方便的,琢磨着做了一个LINQ的无限级菜单 

 

  闲话不说了,

  上效果图。 

   

 数据库

 

 

代码部分:

DataTable dt;
        
protected void Page_Load(object sender, EventArgs e)
        {
            
if (!IsPostBack)
            {
                
//加载
                GetListALL();
            }
        }
        
public void GetListALL()
        {
            dt 
= new DataTable();  //建一个数据临时存放点
            dt.Columns.Add("Id"typeof(int));
            dt.Columns.Add(
"pro_Id"typeof(Guid));
            dt.Columns.Add(
"pro_Name"typeof(string));
            dt.Columns.Add(
"level"typeof(int));
            
//数据库中的GUID不能为空,就用0来表示父级
            
//递归也是从0级开始的
            GetData(new Guid("00000000-0000-0000-0000-000000000000"), 0);  
            GV_pglist.DataSource 
= dt;  //绑定DATATABLE
            GV_pglist.DataBind();  
        }
        
//lv决定了菜单前面的空格数量
        public void GetData(Guid gd, int lv)
        {
            
//创建一个LINQ类,实例化
            DataLinqDataContext DDC = new DataLinqDataContext();
            var Pg 
= from m in DDC.program
                     
where m.pro_Idbg == gd
                     select m;
            
foreach (var p in Pg)
            {
                
//创建一个DATAROW
                DataRow dr = dt.NewRow();
                dr[
"Id"= p.id;
                dr[
"pro_Name"= p.pro_Name;
                dr[
"pro_Id"= p.pro_Id;
                dr[
"level"= lv;
                dt.Rows.Add(dr);
                
//=============================
                
//递归点
                
//=============================
                GetData(p.pro_Id, lv + 1);
            }
        
protected void GV_pglist_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            
if (e.Row.RowType == DataControlRowType.DataRow)
            {
                
int lvl = 0;
                
int.TryParse(GV_pglist.DataKeys[e.Row.RowIndex]["level"].ToString(), out lvl);
                e.Row.Cells[
2].Text = SetSpace(lvl) + e.Row.Cells[2].Text;
            }
        }

        
protected string SetSpace(int count)
        {    
            
if (count < 0) count = 0;
            
string temp = string.Empty;
            
for (int i = 0; i < count; i++)
            {
                temp 
+= "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
            }
            
return temp;
        }

 

 

 

   by cloudy

   博文不好,多多指教 

   http://www.cnblogs.com/_cloudy

posted @ 2009-12-19 16:12  _cloudy  阅读(829)  评论(2)    收藏  举报