EasyUI tree讀取sql server的表結構得到json格式

來源:互聯網
上載者:User

標籤:

  本來項目需要一個tree的樹結構,後來隨便選擇了一個easyUI tree開源架構,後來碰到一個問題,我是要從資料庫遞迴出結構的,轉成json的,怎麼做?難道是遞迴了拼接StringBuilder?要是這樣做就太傻了,當時也打算這麼做。然後各種百度,部落格園,QQ群去問,回答的也是五花八門,沒人給我指點詳細的,我只好自己琢磨了。

第一:遞迴資料庫的表。

第二:序列化最後的遞迴結果。

這裡是我的資料庫的表:

                    

然後下面是代碼:

這裡需要建立一個實體類,類的屬性跟資料庫表的一樣,只是多了一個泛型屬性,是為了儲存子物件,你想看,要是這個類的屬性有:ID,Name,ParentID(資料庫的欄位一樣)你怎麼遞迴得到父子的關係的tree?所以就多一個欄位,這個欄位就是泛型,例如我下面聲明的類叫:Tree,所以我的類裡有4個屬性:ID,Name,ParentID,item,因為在easyUI tree裡面,它的json結構是這樣的:

  [{ "id":"1" , "text":"檔案夾" , "status":"open" , "children":

      [{ "id":"1" , "text":"檔案夾" , "status":"open" , "children":null }]

  }]

所以多這個List<Tree>就是儲存一個一模一樣的子物件,這裡我聲明item為儲存子物件。

1     public class Tree2     {3         public int ID;4         public string Name;5         public int ParentID;6         public List<Tree> item;7     }

 

這裡就是我寫的遞迴方法:

 1      /// <summary> 2         ///  用於遍曆資料庫表中儲存上下級關係的tree結構 3         /// </summary> 4         /// <param name="ParentID">父級ID</param> 5         /// <param name="li">list對象</param> 6         /// <returns></returns> 7         protected List<Tree> Recursive(int ParentID,List<Tree> li) 8         { 9             DataSet ds_content = Sql.GetDaTa("SELECT * FROM tb_cm WHERE parentID=" + ParentID);10             if (ds_content.Tables[0].Rows.Count > 0)//判斷如果查詢到的結果不為空白,才去遞迴11             {           12                 //DataSet ds_content = Sql.GetDaTa("SELECT * FROM tb_cm WHERE parentID=" + ParentID);//根據父id查詢有沒有子id13                 for (int i = 0; i < ds_content.Tables[0].Rows.Count; i++)14                 {15                     List<Tree> lis = new List<Tree>();//聲明一個泛型用於儲存子物件,Tree是我自己建立的一個類,16                     Tree t = new Tree();17                     t.ID = int.Parse(ds_content.Tables[0].Rows[i][0].ToString());               18                     t.Name = ds_content.Tables[0].Rows[i][1].ToString();                        19                     t.ParentID=int.Parse(ds_content.Tables[0].Rows[i][2].ToString());         20                     DataSet ds_HaveItem = Sql.GetDaTa("SELECT id FROM tb_cm WHERE parentID="+t.ID);//查詢用於判斷是否有子物件21                     //三元運算子判斷大於0代表有子物件,有就返回遍曆,否則返回null22                     t.item = ds_HaveItem.Tables[0].Rows.Count > 0 ? Recursive(t.ID, lis) : null;23 24                     li.Add(t);                        25                 }26             }27             return li;28         }    

 

這裡就是序列化,序列化就變成json格式,所以不需要sb.append("[{")這樣的去拼接字串:

1  protected void Page_Load(object sender, EventArgs e)2         {3             GridView1.DataSource = Sql.GetDaTa("select * from tb_cm");4             GridView1.DataBind();5 6             List<Tree> li = new List<Tree>();7             Response.Write(Newtonsoft.Json.JsonConvert.SerializeObject(Recursive(0, li)));8         }

 

這個Newtonsoft.Json.JsonConvert.SerializeObject()序列化是我去csdn看別人回答的時候提到這個,這個是別人封裝了的東西,從github下載來的,下載好了放到項目裡,在項目裡的引用那裡點擊【添加引用】,然後選擇【瀏覽】找到你的項目裡的這個dll,然後就成這樣了:

 

下面這個Sql是我自己建立的類,裡面返回查詢結果,你可以自己寫吧,記得在這個類的最上面引用的地方輸入:using System.Configuration;

 1     public class Sql 2     { 3         static string connstr = ConfigurationManager.ConnectionStrings["connStr"].ToString(); 4  5         static SqlConnection conn = new SqlConnection(connstr); 6  7         public static DataSet GetDaTa(string sql) 8         { 9             DataSet ds = new DataSet();10             SqlDataAdapter sda = new SqlDataAdapter(sql, conn);11             sda.Fill(ds);12             13             return ds;14         }15 16     }

 

設定檔:

 

然後就運行吧:

已經輸出json格式的內容了,把它賦值到json線上編輯器看看如何?

 

嗯,一切正常,我就不做前台的了,你用的話自己在前台ajax請求到後台返回這個結果就行了。睡覺了,一下還要上班。。

EasyUI tree讀取sql server的表結構得到json格式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.