easyui復選框樹動態加載后台數據,實現自動選中數據庫中數據。后台語言是.NET


最近公司做項目用到了easyui復選框樹來實現加載不同類型產品。因為我剛剛畢業,現在也算是實習吧,所以一臉懵逼啊。在公司里的一個哥的幫助下 ,我寫出來這個EasyUi復選框樹了,雖然東西不難,但也是自己弄出來的,有成就感,進步總要一點一點的,經驗需要積累。

先上一下圖片吧 ,輕噴啊  我是應屆生。。。。

 

查看了一下API,

給一組Json數據,其中要包括必要的樹控件的屬性,這下就有了思路。可以順着思路走,既然它需要這些屬性,那么我們就創建一個Model,其中包括這些屬性,名稱要相同哦,

 1 public class TreeModel
 2     {
 3         public string id { get; set; }
 4 
 5         public string text { get; set; }
 6 
 7         public string state { get; set; }
 8 
 9         public string iconCls { get; set; }
10 
11         //子節點
12         public List<TreeModel> children { get; set; }
13     }

 

有了Model之后,就可以為這個Model寫方法賦值,把從數據庫里查到的數據賦值給樹節點,這就可以進行數據的展示了,比如此處,我要從數據字典里獲取到產品的類別,然后與數據庫表進行關聯查詢出每個類別下的產品,綁定到model上並賦值給樹。代碼如下

 public List<TreeModel> GetProduct()
         {
            using (DBModelContainer db = new DBModelContainer())
            {
                List<TreeModel> ls = new List<TreeModel>();

                //TreeModel tm = new TreeModel();
                //tm.id = "01";
                //tm.text = "蔬菜";
                //tm.state = "closed";
                //tm.children = GetChild("01");
                //ls.Add(tm);

                ComDictionaryRepository dic=new ComDictionaryRepository(db);
                var query = dic.GetList();

                var queryData = from a in query.ToList()
                                select new TreeModel
                                {
                                    id = a.DicValue,
                                    text = a.DicText,
                                    //iconCls="icon-save"
                                    state = getState(a.DicValue) == true ? "closed" : "open",
                                    children = GetChild(a.DicValue)
                                };
                var list = queryData.ToList();
                return list;
            }
        }

        private bool getState(string ProductId)
        {
            bool b = false;
            if (ProductId!=""&& ProductId!=null)
            {
                b = false;
            }
            else
            {
                b = true;
            }
            return b;
        }
        public List<TreeModel> GetChild(string ParentId)
        {
            List<TreeModel> list;
            if (string.IsNullOrEmpty(ParentId))
            {
                list = new List<TreeModel>();
            }
            else
            {
                using (DBModelContainer db = new DBModelContainer())
                {
                    var queryData = from a in db.Product
                                    where a.ParentId == ParentId
                                    select new TreeModel
                                    {
                                        id = a.ProductId,
                                        text = a.ProductName,
                                        state = "open"//,
                                        //children = GetProduct()
                                    };
                    list = queryData.ToList();

                }

            }
            return list;
        }

代碼寫的有點shit,,,注釋掉的是開始做的時候寫死的,為了看效果,不舍得刪除啊,

接下來就是前台的Js用來接收數據了

 1 $('#myTree').tree({
 2             url: '/ProductGroup/GetProduct',
 3             onLoadSuccess: function (node, data) {
 4                 var tree = $(this);
 5                 if (data) {
 6                     $(data).each(function (index, d) {
 7                         if (this.state == 'closed') {
 8                             tree.tree('expandAll');
 9                         }
10                     });
11                 }
12             }
13         });

這是Js初始化加載

 

獲取選中的樹節點(可以獲取Id值和文本值),這里我需要的是ID值,下面是Js代碼

 1 //獲取選中的樹節點
 2     function getChecked() {
 3         var nodes = $('#myTree').tree('getChecked');
 4         var s = '';
 5         for (var i = 0; i < nodes.length; i++) {
 6             if (s != '') s += ',';
 7             s += nodes[i].id;
 8         }
 9         //alert(s);
10         return s;
11     }

清除選中復選框的代碼

1  function unCheck() {
2         var nodes = $('#myTree').tree('getChecked')//獲取選中的樹復選框
3         for (var i = 0; i < nodes.length; i++) {
4             $('#myTree').tree('uncheck',nodes[i].target);
5         }
6     }

 

 

在修改數據的時候需要首先加載已存在的數據,對於復選框樹來說,這就涉及到了把對應產品自動選中,實現這個功能最簡單的辦法就是先加載出全部的產品,然后再拿到一組數據與復選框樹全部的ID進行對比,如果相同,設置復選框為選中狀態,否則不操作。

 后台

 1         /// <summary>
 2         /// 用來與所有的Tree復選框作對比,並把結果集的對應復選框進行回填
 3         /// </summary>
 4         /// <param name="groupId"></param>
 5         /// <returns></returns>
 6         public ActionResult GetChecked(string groupId)
 7         {
 8             groupId = Request.Params["groupId"];
 9             List<ProductGroupRelModel> list;
10             list = m_BLL.GetChecked(groupId);
11             return Json(list, JsonRequestBehavior.AllowGet);
12         }

 

下面貼代碼,注釋是我的思考過程,還是舍不得刪除啊~~~~

 1 function EditInfo() {
 2 
 3         if ($('#List').datagrid('getSelections')[0] != null && $('#List').datagrid('getSelections')[0].Id != "") {
 4             $('#txtName').textbox('setValue', $('#List').datagrid('getSelections')[0].GroupName);
 5             var groupId = $('#List').datagrid('getSelections')[0].Id;
 6             
 7             $.ajax({
 8                 type: "post",
 9                 url: "/ProductGroup/GetChecked",
10                 data: { "groupId": groupId },
11                 dataType: "json",
12                 success: function (data) {
13                     
14                     // var nodes = $('#myTree').tree('getChecked', 'unchecked');//接收未選中的(因為不知道所有的怎么遍歷所以這里用未選中來代替)
15                     var nodes = $('#myTree').tree('getChildren', 'unchecked');
16                     //for (var i = 0; i < data.length; i++) {
17                     //    //用獲取到的數據的id與所有的id相對比,如果相同了,則設置當前的這個復選框的狀態為被選中
18                     //    //。。。怎么設置呢?
19                     //    if (nodes[i].id == data.id) {
20                     //    //nodes[i].checked = "true";//設置為選中狀態
21                     //    $('#myTree').tree('check', nodes[i].target);
22                     //    }
23                     //}
24                     
25                     for (var i = 0; i < data.length; i++) {
26                         for (var j = 0; j < nodes.length; j++) {
27                             if (data[i].Id == nodes[j].id) {
28                                 $('#myTree').tree('check', nodes[j].target);/////////-----------------tmd!!!!!!這是nodes[J]好不好!!!!!寫什么I ?????
29                             }
30                             //else {
31                             //    $('#myTree').tree('uncheck', nodes[i].target);
32                             //}       >>>>>>>>>>>>>>>>>>>>>不知道是什么鬼,加上這個就不能選中了
33                         }
34                     }
35                 }
36                 
37             })
38             $('#btnSubmit').show();
39 
40             $('#infoWindow').panel('setTitle', '修改產品組信息');
41             $('#infoWindow').window('open');
42             var submitType = 2;
43         }
44         else {
45             $.messager.alert('提示', '請選擇一條數據進行修改!', 'warning');
46         }
47     }

好了,基本上就是這么個過程,有很多不足的地方,希望朋友們有什么好的想法可以告知小弟一下,

嗯!!!!學習!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM