递归和循环---从EasyUI Tree 发现自己的硬伤

前一阵子,朋友托我帮忙用vb.net写一个数独游戏,我当时的第一个想法---万能的互联网肯定有资源,肯定有人写---当然这是必须的---我站在巨人的肩膀上帮朋友完成代码---但是我突然觉得自己站在巨人这么高的肩膀上太高耸,想要找一下脚踏实地的感觉,所以我想自己写写,看看能不能写出来,结果就是------我压根没有思路。

对,毫不夸张,无从下手。

更深刻的一件事就是项目中用的的树状结构(easyui tree 实现),同样是根据数据库动态生成,我站在巨人的肩膀上,看着网上类似的datatable转json拼接,很简单很简单的只是用到了一个循环,一个递归,可是把代码真正应用于我们的系统,我整整用了一天的时间,整整一天只写了一个循环,一个递归。

写出来的那一刻要多美好有多美好,更重要的是我写完一个接下来一口气又写了三个,更更重要的是我发现自己循环和递归还有数学逻辑编程这方面是硬伤啊,然后接下来最最重要的一条:都是自己吓唬自己罢了,这才是硬伤。

天天骗自己循环递归,算法自己不会写,写不好所以每次遇到循环递归算法都想着绕开走,想着让别人写吧,我是真的不会啊种种,哎呀呀白接受米总的教育了。。到现在还这样自己骗自己。

真的没什么难的,所谓的难不过是自己告诉自己难,不过是自己给自己设立的围墙。

最后献上datatable转easyui treejson 的代码,大家不要见笑,就是这么简单。

ps:代码注释不是没有而是给去掉了,没有挑战简直没意思

  public static string DatatableToJsonUserRoleTree(DataTable dt, string pid, string pvalue, string id, string name, int flag)
         {
             StringBuilder sb = new StringBuilder();
             DataTable chdt = GetChildren(int.Parse(pvalue));
             string filter = String.Format(" {0}='{1}'", pid, pvalue);
             DataRow[] drs = dt.Select(filter);
             if (drs.Length < 1 && chdt.Rows.Count < 1)
             {
                 return "";
             }
             if (drs.Length >= 1 || chdt.Rows.Count >= 1)
             {
                 sb.Append(",\"children\":[");
                 if (chdt.Rows.Count >= 1)
                 {
                     foreach (DataRow chdrs in chdt.Rows)
                     {
                         int groupid = int.Parse(chdrs["group_id"].ToString());
                         sb.Append("{");
                         sb.AppendFormat("\"id\":\"{0}\",", chdrs["group_id"].ToString());
                         sb.AppendFormat("\"text\":\"{0}\"", chdrs["group_name"].ToString());
                         DataTable userdt = GetUserByGroup(groupid);
                         if (userdt.Rows.Count >= 1)
                         {
                             sb.Append(",\"children\":[");
                             foreach (DataRow userdrs in userdt.Rows)
                             {
                                 sb.Append("{");
                                 sb.AppendFormat("\"user_id\":\"{0}\",", userdrs["user_id"].ToString());
                                 sb.AppendFormat("\"text\":\"{0}\"", userdrs["user_name"].ToString());
                                 sb.Append("},");
                             }
                             if (sb.ToString().EndsWith(","))
                             {
                                 sb.Remove(sb.Length - 1, 1);
                             }
                             sb.Append("]");
                         }
                         sb.Append("},");
                     }

                 }

                 if (drs.Length >= 1)
                 {

                     foreach (DataRow dr in drs)
                     {
                         string spid = dr[id].ToString();
                         sb.Append("{");
                         sb.AppendFormat("\"id\":\"{0}\",", dr[id].ToString());
                         sb.AppendFormat("\"text\":\"{0}\"", dr[name].ToString());

                         sb.Append(DatatableToJsonUserRoleTree(dt, pid, spid, id, name, 0).TrimEnd(','));
                         sb.Append("},");

                     }

                 }

             }
             if (sb.ToString().EndsWith(","))
             {
                 sb.Remove(sb.Length - 1, 1);
             }
             sb.Append("]");
             return sb.ToString();
         }

上士闻道,勤能行之。中士闻道,若存若亡。下士闻道,大笑之。---------共勉

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-04 01:03:45

递归和循环---从EasyUI Tree 发现自己的硬伤的相关文章

easyui Tree模拟级联勾选cascadeCheck,节点选择,父节点自动选中,节点取消,父节点自动取消选择,节点选择,所有子节点全部选择,节点取消,所有子节点全部取消勾选

最近项目中用到easyui tree,发现tree控件的cascadeCheck有些坑,不像miniui 的tree控件,级联勾选符合业务需求,所以就自己重新改写了onCheck事件,符合业务需求.网上百度了很多资料,都没有完全符合自己业务场景的,所以就自己动手写咯. 先说一下自己的业务需求: 1.选中节点,上级以及所有直系上级节点自动选中,所有下级子孙节点全部自动选中: 2.取消选择节点,如果兄弟节点都未选择,则上级以及所有直系上级节点自动取消选择,所有下级子孙节点全部取消选中. 这里说一下c

EasyUI tree读取sql server的表结构得到json格式

本来项目需要一个tree的树结构,后来随便选择了一个easyUI tree开源框架,后来碰到一个问题,我是要从数据库递归出结构的,转成json的,怎么做?难道是递归了拼接StringBuilder?要是这样做就太傻了,当时也打算这么做.然后各种百度,博客园,QQ群去问,回答的也是五花八门,没人给我指点详细的,我只好自己琢磨了. 第一:递归数据库的表. 第二:序列化最后的递归结果. 这里是我的数据库的表: 然后下面是代码: 这里需要建立一个实体类,类的属性跟数据库表的一样,只是多了一个泛型属性,是

easyui tree末端子菜单显示:

easyui树形显示注意事项: [{"id":"01","text":"商户管理","state":"closed","checked":true,"children":[{"id":"0100","text":"商户管理","state":&quo

EasyUI Tree判断节点是否是叶

方法1:  $('#domaincatalog').tree('isLeaf', node.target); 返回true或false ,true表示是叶节点, false即不是 方法2:官方文档中:看到每个节点都有一些属性,其中一个是state,我们就通过这个state来判断.state有两个值 open和closed表示当前节点 打开和关闭了树的状态.当state等于undefined的时候就表示当前节点是Leaf 叶了. 在tree的onclick事件上添加判断代码如下 $("#domai

Jquery EasyUI Tree树形结构的Java实现(实体转换VO)

前一阵做的OA项目,有一个是组织架构的树,因为是分开做的,我做的是Controller和页面,其他组做的Service和Dao,因为之前一直没有商量页面用什么框架做比较好,导致,Dao层取出来的数据都不是Easyui Tree所能识别的,其实后台返回的也是树形的结构,但是他们返回来的 **id,而不是Easyui Tree所能识别的id:他们返回的是name,,而不是Easyui Tree所能识别的text,他们返回的是****,,而不是Easyui Tree所能识别的children,因为别人

.NET easyUI tree树状结构

简单的制作后台制作写一个json(string类型)格式 public partial class goodstype_type : System.Web.UI.Page { public string datalist = "",tree=""; goodstypeManage bll = new goodstypeManage(); goodstype model = new goodstype(); protected void Page_Load(objec

easyui tree 级联从三种状态变为两种状态

在网上找的方法都是使用方法$('#tree').tree('select', node.target);都没绕开oncheck方法,后来发现easyui tree提供了一个update方法可以成功绕开onCheck方法,从而成功将级联改为两种状态.代码如下: $('#tree').tree({ url: '/tree' ,lines:false ,checkbox:true ,cascadeCheck: false ,onCheck: function (node, checked) { blC

JQuery EasyUi Tree获取所有checkbox选中节点的id和内容

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html>    <head>        <meta name="generator" content="HTML Tidy, see www.w3.org">      

[转]easyui tree 模仿ztree 使用扁平化加载json

原文地址:http://my.oschina.net/acitiviti/blog/349377 参考文章:http://www.jeasyuicn.com/demo/treeloadfilter.html 一.扩展原因 ztree使用了一种扁平化的数据加载方式,就是id(自身id),pid(父id)的方式,参考http://www.ztree.me/v3/demo.php#_102,于是扩展easyui tree 也使用这种亲民的方式: 二.基本方法 1,载入扩展文件 2,在JS中实例化TRE