好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#递归方法实现无限级分类显示效果实例

本文实例讲述了C#递归方法实现无限级分类显示效果。分享给大家供大家参考,具体如下:

运行效果如下图所示:

具体代码如下:

?

<%@ Page Language= "C#" AutoEventWireup= "true" CodeFile= "RoleDemo20150305.aspx.cs" Inherits= "RoleDemo20150305" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

<html xmlns= "http://www.w3.org/1999/xhtml" >

<head runat= "server" >

   <title>C#无限级分类递归显示示例</title>

   <style type= "text/css" >

   span { float :left; clear:both;}

   </style>

   <script src= "JS/jquery-1.9.1.js" type= "text/javascript" ></script>

   <script type= "text/javascript" >

     $(function () {

       $( "span" ).eq(0).show();

       $( "span" ).each(function (i) {

         var curr = $( this ).attr( "data-id" );

         $( this ).click(function () {

           $( "span" ).each(function (i) {

             var father = $( this ).attr( "data-father" );

             if (father == curr) {

               $( this ).show();

             }

           });

         });

       });

     });

   </script>

</head>

<body>

   <form id= "form1" runat= "server" >

   <div>

     <asp:GridView ID= "GridView1" runat= "server" >

     </asp:GridView>

     <br/><br/><br/><br/>

     <asp:Literal ID= "lt1" runat= "server" ></asp:Literal>

   </div>

   </form>

</body>

</html>

?

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Text;

using System.Data;

using System.Web.UI;

using System.Web.UI.WebControls;

public partial class RoleDemo20150305 : System.Web.UI.Page

{

   protected void Page_Load( object sender, EventArgs e)

   {

     DataTable dt = createDT();

     DataTable dtFinal = dt.Clone();

     List< string > list = new List< string >();

     string userStr = GetUserData();

     if (userStr.Contains( "," ))

     {

       string [] strs = userStr.Split( ',' );

       for ( int i = 0; i < strs.Length; i++)

       {

         list.Add(strs[i]);

       }

     }

     else

     {

       list.Add(userStr);

     }

     for ( int i = 0; i < list.Count; i++)

     {

       string module_id = list[i];

       DataRow[] drSource = dt.Select( " module_id = '" + module_id + "'" ); //最终DT是否存在该数据

       DataRow[] drExist = dtFinal.Select( " module_id = '" + module_id + "'" ); //最终DT是否存在该数据

       if (drExist.Length == 0)

       {

         dtFinal.Rows.Add(drSource[0][ "module_id" ], GetPreTag(drSource[0][ "module_level" ]) + drSource[0][ "module_name" ], drSource[0][ "module_fatherid" ],

           drSource[0][ "module_url" ], drSource[0][ "module_order" ], drSource[0][ "module_level" ]); //添加记录

       }

       FindFatherFromDT(dt, drSource, dtFinal);

     }

     //显示方式一

     DataView dv = dtFinal.DefaultView;

     dv.Sort = "module_id asc" ;

     DataTable dtNeed = dv.ToTable();

     GridView1.DataSource = dtNeed;

     GridView1.DataBind();

     //显示方式二

     StringBuilder builder = new StringBuilder();

     for ( int i = 0; i < dtNeed.Rows.Count; i++)

     {

       DataRow dr = dtNeed.Rows[i];

       builder.AppendLine( "<span data-id='" + dr[ "module_id" ] + "' data-father='" + dr[ "module_fatherid" ] + "' style='display:none'>"

        + dr[ "module_name" ] + "</span>" );

     }

     lt1.Text = builder.ToString();

   }

   /// <summary>

   /// 继续追溯添加父类记录

   /// </summary>

   /// <param name="dt"></param>

   /// <param name="dtFinal"></param>

   protected void FindFatherFromDT(DataTable dt, DataRow[] drFather, DataTable dtFinal)

   {

     DataRow[] drFatherUp = dt.Select( " module_id = '" + drFather[0][ "module_fatherid" ] + "'" );

     DataRow[] drFatherUpExist = dtFinal.Select( " module_id = '" + drFather[0][ "module_fatherid" ] + "'" );

     if (drFatherUp.Length > 0 && drFatherUpExist.Length == 0) //该记录存在父类且父类未添加到最终DT

     {

       dtFinal.Rows.Add(drFatherUp[0][ "module_id" ], GetPreTag(drFatherUp[0][ "module_level" ]) + drFatherUp[0][ "module_name" ], drFatherUp[0][ "module_fatherid" ],

           drFatherUp[0][ "module_url" ], drFatherUp[0][ "module_order" ], drFatherUp[0][ "module_level" ]); //继续追溯添加父类记录

       FindFatherFromDT(dt, drFatherUp, dtFinal);

     }

   }

   #region 添加前缀

   protected string GetPreTag( object num)

   {

     string pre = string .Empty;

     int i = Convert.ToInt32(num);

     if (i < 2)

     {

     }

     else if (i == 2)

     {

       pre += "└" ;

     }

     else

     {

       pre += "└" ;

       for ( int j = 0; j < i - 2; j++)

       {

         pre += "─" ;

       }

     }

     return pre;

   }

   #endregion

   #region 用户测试数据

   protected static string GetUserData()

   {

     DataTable dt = new DataTable();

     dt.Columns.Add( "userId" );

     dt.Columns.Add( "userModuleOption" );

     dt.Rows.Add( "张三" , "M01010305,M010205,M0101030301" );

     return dt.Rows[0][ "userModuleOption" ].ToString();

   }

   #endregion

   #region 创建数据

   protected static DataTable createDT()

   {

     DataTable dt = new DataTable();

     dt.Columns.Add( "module_id" );

     dt.Columns.Add( "module_name" );

     dt.Columns.Add( "module_fatherid" );

     dt.Columns.Add( "module_url" );

     dt.Columns.Add( "module_order" );

     dt.Columns.Add( "module_level" );

     dt.Rows.Add( "C1" , "全国" , "0" , "" , "1" , "1" );

     dt.Rows.Add( "M01" , "广东" , "C1" , "" , "1" , "2" );

     //深圳

     dt.Rows.Add( "M0101" , "深圳" , "M01" , "3.aspx" , "100" , "3" );

     dt.Rows.Add( "M010101" , "南山区" , "M0101" , "4.aspx" , "1000" , "4" );

     dt.Rows.Add( "M010102" , "罗湖区" , "M0101" , "" , "1001" , "4" );

     dt.Rows.Add( "M010103" , "福田区" , "M0101" , "" , "1002" , "4" );

     dt.Rows.Add( "M010104" , "宝安区" , "M0101" , "" , "1003" , "4" );

     dt.Rows.Add( "M010105" , "龙岗区" , "M0101" , "" , "1004" , "4" );

     //深圳 - 福田区

     dt.Rows.Add( "M01010301" , "上梅林" , "M010103" , "" , "1002001" , "5" );

     dt.Rows.Add( "M01010302" , "下梅林" , "M010103" , "" , "1002002" , "5" );

     dt.Rows.Add( "M01010303" , "车公庙" , "M010103" , "" , "1002003" , "5" );

     dt.Rows.Add( "M01010304" , "竹子林" , "M010103" , "" , "1002004" , "5" );

     dt.Rows.Add( "M01010305" , "八卦岭" , "M010103" , "" , "1002005" , "5" );

     dt.Rows.Add( "M01010306" , "华强北" , "M010103" , "" , "1002006" , "5" );

     //深圳 - 福田区 - 车公庙

     dt.Rows.Add( "M0101030301" , "天安数码城" , "M01010303" , "" , "100200301" , "6" );

     //广州

     dt.Rows.Add( "M0102" , "广州" , "M01" , "" , "101" , "3" );

     dt.Rows.Add( "M010201" , "越秀区" , "M0102" , "" , "1105" , "4" );

     dt.Rows.Add( "M010202" , "海珠区" , "M0102" , "" , "1106" , "4" );

     dt.Rows.Add( "M010203" , "天河区" , "M0102" , "" , "1107" , "4" );

     dt.Rows.Add( "M010204" , "白云区" , "M0102" , "" , "1108" , "4" );

     dt.Rows.Add( "M010205" , "黄埔区" , "M0102" , "" , "1109" , "4" );

     dt.Rows.Add( "M010206" , "荔湾区" , "M0102" , "" , "1110" , "4" );

     dt.Rows.Add( "M010207" , "罗岗区" , "M0102" , "" , "1111" , "4" );

     dt.Rows.Add( "M010208" , "南沙区" , "M0102" , "" , "1112" , "4" );

     return dt;

   }

   #endregion

}

希望本文所述对大家C#程序设计有所帮助。

dy("nrwz");

查看更多关于C#递归方法实现无限级分类显示效果实例的详细内容...

  阅读:45次