分享 C#不用treeview控件生成漂亮的树型结构

时间:2022-02-24 12:55:55
据说是PHPCMS用的生成树类。的确很帅,没有太多时间直接照搬改成C#版。

     /// <summary>  
    /// 通用的树型类,可以生成任何树型结构   
    /// </summary>  
    public class CateTreeView  
    {  
        IList<CategoryInfo> lsCate = new List<CategoryInfo>();  //初始化数组   
        string[] icons = new string[] { "│", "├", "└" };   //修饰符号   
        string htmlret = "";  
        string nbsp = " ";  
        public CateTreeView(IList<CategoryInfo> ls)  
        {  
            lsCate = ls;  
            htmlret = "";  
        }  
        public CategoryInfo getOne(int id)  
        {  
            foreach (CategoryInfo m in lsCate)  
            {  
                if (m.cateid == id)  
                {  
                    return m;  
                }  
            }  
            return null;  
        }  
  
        /// <summary>  
        /// 得到父级数组  
        /// </summary>  
        /// <param name="myid"></param>  
        /// <returns></returns>  
        public IList<CategoryInfo> get_parent(int myid)  
        {  
            IList<CategoryInfo> lsnew = new List<CategoryInfo>();  
            CategoryInfo m = getOne(myid);  
            if (m == null) return lsnew;  
            int pid = m.parentid;  
            if (pid == 0) return lsnew;  
            pid = getOne(pid).parentid;  
            foreach (CategoryInfo mcate in lsCate)  
            {  
                if (mcate.parentid == pid)  
                {  
                    lsnew.Add(mcate);  
                }  
            }  
            return lsnew;  
  
        }  
        /// <summary>  
        /// 得到子级分类  
        /// </summary>  
        /// <param name="myid"></param>  
        /// <returns></returns>  
        public IList<CategoryInfo> get_child(int myid)  
        {  
            IList<CategoryInfo> lsnew = new List<CategoryInfo>();  
  
            foreach (CategoryInfo mcate in lsCate)  
            {  
                if (mcate.parentid == myid)  
                {  
                    lsnew.Add(mcate);  
                }  
            }  
            return lsnew;  
        }  
   
        /// <summary>  
        /// 得到树型结构  
        /// </summary>  
        /// <param name="myid">表示获得这个ID下的所有子级</param>  
        /// <param name="str">生成树型结构的基本代码,例如: option value=$id $selected $spacer$name option </param>  
        /// <param name="sid">被选中的ID,比如在做树型下拉框的时候需要用到</param>  
        /// <param name="adds"></param>  
        /// <param name="str_group"></param>  
        /// <returns></returns>  
        public string get_tree(int myid, string str, int sid, string adds, string str_group)  
        {  
            int number = 1;  
            IList<CategoryInfo> child = get_child(myid);  
            if (child.Count > 0)  
            {  
                int total = child.Count;  
                foreach (CategoryInfo m in child)  
                {  
                    string j = "", k = "";  
                    if (number == total)  
                    {  
                        j += icons[2];  
                    }  
                    else  
                    {  
                        j += icons[1];  
                        k = adds != "" ? icons[0] : "";  
                    }  
                    string spacer = adds != "" ? adds + j : "";  
                    string selected = m.cateid == sid ? "selected" : "";  
                    string tempstr = "";  
                    if (m.parentid == 0 && str_group != "") //? "\$nstr = \"$str_group\";" : "\$nstr = \"$str\";";  
                    {  
                        tempstr = str_group;  
                    }  
                    else  
                    {  
                        tempstr = str;  
                    }  
                    tempstr = tempstr.Replace("$id", m.cateid.ToString());  
                    tempstr = tempstr.Replace("$parentid", m.parentid.ToString());  
  
                    tempstr = tempstr.Replace("$select", selected);  
                    tempstr = tempstr.Replace("$spacer", spacer);  
                    tempstr = tempstr.Replace("$name", m.catename);  
                    tempstr = tempstr.Replace("$modelid", m.modelid.ToString());  
  
                    htmlret += tempstr;  
                    string bspstr = nbsp;  
                    get_tree(m.cateid, str, sid, adds + k + bspstr, str_group);  
                    number++;  
                    //$this->ret .= $nstr;  
                    //$nbsp = $this->nbsp;  
                    //$this->get_tree($id, $str, $sid, $adds.$k.$nbsp,$str_group);  
                    //$number++;  
                }  
            }  
            return htmlret;  
            //return $this->ret;  
        }  
        /// <summary>  
        /// 同上一类方法,jquery treeview 风格,可伸缩样式(需要treeview插件支持)  
        /// </summary>  
        /// <param name="myid">表示获得这个ID下的所有子级</param>  
        /// <param name="effected_id">需要生成treeview目录数的id</param>  
        /// <param name="str">末级样式</param>  
        /// <param name="str2">目录级别样式</param>  
        /// <param name="showlevel">直接显示层级数,其余为异步显示,0为全部限制</param>  
        /// <param name="style">目录样式 默认 filetree 可增加其他样式如'filetree treeview-famfamfam</param>  
        /// <param name="currentlevel">计算当前层级,递归使用 适用改函数时不需要用该参数</param>  
        /// <param name="recursion">递归使用 外部调用时为FALSE</param>  
        /// <returns>HTML</returns>  
        public string get_treeview(int myid, string effected_id, string str, string str2, int showlevel, string style, int currentlevel, bool recursion)  
        {  
            IList<CategoryInfo> child = get_child(myid);  
             
            string effected = "id=\"" + effected_id + "\"";  
  
            string placeholder = "<ul><li><span class='placeholder'></span></li></ul>";  
            if (!recursion) htmlret += "<ul " + effected + "  class=\"" + style + "\">";  
            foreach (CategoryInfo m in child)  
            {  
                IList<CategoryInfo> child2 = get_child(m.cateid);  
                string folder = "";  
                //@extract($a);  
                if (showlevel > 0 && showlevel == currentlevel && (child2.Count > 0)) folder = "hasChildren"; //如设置显示层级模式@2011.07.01  
                string floder_status = ((folder != "") ? " class=\"" + folder + "\"" : "");  
                htmlret += recursion ? "<ul><li " + floder_status + " id=\"" + m.cateid + "\">" : "<li " + floder_status + " id=\"" + m.cateid + "\">";  
                recursion = false;  
                if (child2.Count > 0)  
                {  
                    string nstr = str2;  
                    //eval("\$nstr = \"$str2\";");  
                    string tempstr = str2;  
                    tempstr = tempstr.Replace("$id", m.cateid.ToString());  
                    tempstr = tempstr.Replace("$parentid", m.parentid.ToString());  
                    //tempstr = tempstr.Replace("$select", selected);  
                    //tempstr = tempstr.Replace("$spacer", spacer);  
                    tempstr = tempstr.Replace("$name", m.catename);  
                    tempstr = tempstr.Replace("$modelid", m.modelid.ToString());  
                    htmlret += tempstr;  
                    if (showlevel == 0 || (showlevel > 0 && showlevel > currentlevel))  
                    {  
                        get_treeview(m.cateid, effected_id, str, str2, showlevel, style, currentlevel + 1, true);  
                    }  
                    else if (showlevel > 0 && showlevel == currentlevel)  
                    {  
                        htmlret += placeholder;  
                    }  
                }  
                else  
                {  
                    string nstr = str;  
                    string tempstr = str;  
                    tempstr = tempstr.Replace("$id", m.cateid.ToString());  
                    tempstr = tempstr.Replace("$parentid", m.parentid.ToString());  
                    //tempstr = tempstr.Replace("$select", selected);  
                    //tempstr = tempstr.Replace("$spacer", spacer);  
                    tempstr = tempstr.Replace("$name", m.catename);  
                    tempstr = tempstr.Replace("$modelid", m.modelid.ToString());  
                    htmlret += tempstr;  
             
                    //str += nstr;  
                }  
                htmlret += recursion ? "</li></ul>" : "</li>";  
            }  
            if (!recursion)htmlret += "</ul>";  
            return htmlret;  
        }  
  
    }  

 没有太高的复用性,用到的人自行改进把呵呵。别忘了改后再分享下。 其中CategoryInfo类是 分类实体类。
 
结合jquery treeview 插件 做出的效果图如下:
分享 C#不用treeview控件生成漂亮的树型结构

详细参考: 东营网站建设:C#生成漂亮的树型结构

101 个解决方案

#1


该回复于2012-01-04 14:30:07被版主删除

#2


该回复于2012-01-04 10:41:57被版主删除

#3


该回复于2012-01-06 08:43:33被版主删除

#4


该回复于2012-01-04 10:42:58被版主删除

#5


该回复于2012-01-04 10:42:58被版主删除

#6


该回复于2012-01-04 10:44:03被版主删除

#7


该回复于2012-01-03 10:44:07被版主删除

#8


楼上的 乱发广告 小心生娃没屁眼儿

#9


该回复于2012-01-04 10:02:26被版主删除

#10


该回复于2012-01-04 10:03:37被版主删除

#11


该回复于2012-01-04 10:03:36被版主删除

#12


该回复于2012-01-04 10:03:30被版主删除

#13


很COOL....MARK之

#14


好,不错

#15


该回复于2012-01-04 10:05:52被版主删除

#16


该回复于2012-01-04 10:05:46被版主删除

#17


分享 C#不用treeview控件生成漂亮的树型结构

#18


该回复于2012-01-04 10:05:45被版主删除

#19


不用treeview,会不会很复杂?

#20


据说是PHPCMS用的生成树类。的确很帅,没有太多时间直接照搬改成C#版

#21


好,不错

#22


该回复于2012-01-04 10:08:05被版主删除

#23


该回复于2012-01-04 10:08:04被版主删除

#24


该回复于2012-01-04 10:07:55被版主删除

#25


该回复于2012-01-04 10:13:13被版主删除

#26


该回复于2012-01-04 10:13:13被版主删除

#27


是很不错,不过来做广告的吧

#28


该回复于2012-01-04 10:17:20被版主删除

#29


该回复于2012-01-04 13:51:26被版主删除

#30


分享 C#不用treeview控件生成漂亮的树型结构

#31


该回复于2012-01-04 10:17:18被版主删除

#32


该回复于2012-01-04 10:17:18被版主删除

#33


O(∩_∩)O楼主无私。thank you

#34


该回复于2017-05-01 00:00:12被版主删除

#35


该回复于2012-01-04 09:27:41被版主删除

#36


该回复于2012-01-04 09:40:44被版主删除

#37


该回复于2012-01-04 10:23:48被版主删除

#38


引用楼主 code163 的回复:
据说是PHPCMS用的生成树类。的确很帅,没有太多时间直接照搬改成C#版。
C# code

     /// <summary>  
    /// 通用的树型类,可以生成任何树型结构   
    /// </summary>  
    public class CateTreeView  
    {  
        IList<CategoryInfo> lsCate = new……


看效果还不错 回去弄弄自己实现看下

#39


该回复于2012-01-04 10:32:48被版主删除

#40


谢谢奉献,我以前都是用treeview控件的 分享 C#不用treeview控件生成漂亮的树型结构

#41


该回复于2012-01-04 10:30:42被版主删除

#42


好东西.....

#43


该回复于2012-01-04 10:49:17被版主删除

#44


谢谢楼主,收藏了

#45


分享 C#不用treeview控件生成漂亮的树型结构

#46


该回复于2012-01-04 11:30:56被版主删除

#47


分享 C#不用treeview控件生成漂亮的树型结构

#48


该回复于2012-01-04 13:21:18被版主删除

#49


该回复于2012-01-04 14:02:38被版主删除

#50


NICE MARK

#1


该回复于2012-01-04 14:30:07被版主删除

#2


该回复于2012-01-04 10:41:57被版主删除

#3


该回复于2012-01-06 08:43:33被版主删除

#4


该回复于2012-01-04 10:42:58被版主删除

#5


该回复于2012-01-04 10:42:58被版主删除

#6


该回复于2012-01-04 10:44:03被版主删除

#7


该回复于2012-01-03 10:44:07被版主删除

#8


楼上的 乱发广告 小心生娃没屁眼儿

#9


该回复于2012-01-04 10:02:26被版主删除

#10


该回复于2012-01-04 10:03:37被版主删除

#11


该回复于2012-01-04 10:03:36被版主删除

#12


该回复于2012-01-04 10:03:30被版主删除

#13


很COOL....MARK之

#14


好,不错

#15


该回复于2012-01-04 10:05:52被版主删除

#16


该回复于2012-01-04 10:05:46被版主删除

#17


分享 C#不用treeview控件生成漂亮的树型结构

#18


该回复于2012-01-04 10:05:45被版主删除

#19


不用treeview,会不会很复杂?

#20


据说是PHPCMS用的生成树类。的确很帅,没有太多时间直接照搬改成C#版

#21


好,不错

#22


该回复于2012-01-04 10:08:05被版主删除

#23


该回复于2012-01-04 10:08:04被版主删除

#24


该回复于2012-01-04 10:07:55被版主删除

#25


该回复于2012-01-04 10:13:13被版主删除

#26


该回复于2012-01-04 10:13:13被版主删除

#27


是很不错,不过来做广告的吧

#28


该回复于2012-01-04 10:17:20被版主删除

#29


该回复于2012-01-04 13:51:26被版主删除

#30


分享 C#不用treeview控件生成漂亮的树型结构

#31


该回复于2012-01-04 10:17:18被版主删除

#32


该回复于2012-01-04 10:17:18被版主删除

#33


O(∩_∩)O楼主无私。thank you

#34


该回复于2017-05-01 00:00:12被版主删除

#35


该回复于2012-01-04 09:27:41被版主删除

#36


该回复于2012-01-04 09:40:44被版主删除

#37


该回复于2012-01-04 10:23:48被版主删除

#38


引用楼主 code163 的回复:
据说是PHPCMS用的生成树类。的确很帅,没有太多时间直接照搬改成C#版。
C# code

     /// <summary>  
    /// 通用的树型类,可以生成任何树型结构   
    /// </summary>  
    public class CateTreeView  
    {  
        IList<CategoryInfo> lsCate = new……


看效果还不错 回去弄弄自己实现看下

#39


该回复于2012-01-04 10:32:48被版主删除

#40


谢谢奉献,我以前都是用treeview控件的 分享 C#不用treeview控件生成漂亮的树型结构

#41


该回复于2012-01-04 10:30:42被版主删除

#42


好东西.....

#43


该回复于2012-01-04 10:49:17被版主删除

#44


谢谢楼主,收藏了

#45


分享 C#不用treeview控件生成漂亮的树型结构

#46


该回复于2012-01-04 11:30:56被版主删除

#47


分享 C#不用treeview控件生成漂亮的树型结构

#48


该回复于2012-01-04 13:21:18被版主删除

#49


该回复于2012-01-04 14:02:38被版主删除

#50


NICE MARK