激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - 一步一步asp.net ajax類別Tree生成

一步一步asp.net ajax類別Tree生成

2019-10-04 20:02asp.net教程網 ASP.NET教程

關于類別樹的多級是一個剛接觸ajax和多級類別很頭痛的問題,針對那種商品種類繁多,級別層次多更是麻煩的問題,去年剛學asp.net,實驗室的同學曾經這樣做過,遞歸sql,現在看了驚心動魄

一步一步asp.net ajax類別Tree生成
雖然實現了類別多級的問題這樣帶來的后果確實無窮無盡的............. 

遞歸查詢,和雙循環嵌套的執行sql語句沒什么區別了...... 

這樣帶來的是嚴重的性能問題.. 

現在重新做這些東西,我想到了2個方案,第一個: 

針對數據比較少的多級菜單,我們可以通過數據庫一次查詢出來所有記錄,然后通過程序進行遞歸算法,進行數據的轉化. 

第二種: 

就是數據庫設計的時候,設計成多級別的菜單,每次加載通過ajax,一點一點展開(每一次展開都ajax請求下一級的數據),這樣避免的遞歸帶來的性能損失,而且實現簡單方便,非常適合大數據量的時候,但是,一次只能顯示一級,每次都要ajax請求下一級. 

由于后臺管理,第一次就按照第一種方案來設計: 

首先,要設計好數據庫,方便以后兩種方式擴展, 
一步一步asp.net ajax類別Tree生成
這樣設計,主要是考慮方便前臺后臺的擴展,FId字段是一個為了方便前臺查詢而設計的,這樣設計的好處就是如果查詢比如頂級菜單下的所有產品,只需要根據模糊查詢前綴匹配,就能把所有的產品都查詢出來,設計的字段還是有點小,IsLeaf是為了判斷是否是葉子節點,BelongSid父級id, 
一步一步asp.net ajax類別Tree生成
前臺代碼: 

復制代碼代碼如下:


<!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> 
<title>產品類別管理</title> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 
<link href="../css/demo.css" rel="stylesheet" type="text/css" /> 
<script src="../scripts/jquery-1.6.2.min.js" type="text/javascript"></script> 
<script src="../scripts/miniui/miniui.js" type="text/javascript"></script><link href="../scripts/miniui/themes/default/miniui.css" rel="stylesheet" type="text/css" /> 
<link href="../scripts/miniui/themes/icons.css" rel="stylesheet" type="text/css" /> 
</head> 
<body> 
<div class="mini-toolbar"> 
<h1>產品類別管理</h1> 
<div class="mini-panel" /> 這一個難點在于json數據遞歸生成: 
BLL中獲得Tree的json數據 

復制代碼代碼如下:


/// <summary> 
/// 工藝品類別樹轉化為json格式 
/// </summary> 
/// <returns></returns> 
public string craftTypeTreeToJson() 

//傳遞的json格式 
IEnumerable<crafttype> craftTypeList = new crafttypeDAL().ListAll(); 
StringBuilder sb = new StringBuilder("["); 
foreach (crafttype root in craftTypeList) 

if (root.Belongsid == -1) 

sb.Append("{id:\"" + root.ID + "\",text:\"" + root.Name + "\""); 
sb.Append(",pid:\"-1\"");//添加父節點 
sb.Append(",expanded:\"false\""); 
if (root.IsLeaf == "0")//如果是不是葉子節點,那么,就要遞歸添加children:[{xxx},內容 

sb.Append(",children:"); 
GetLeafTree(ref sb, (int)root.ID, craftTypeList);//遞歸追加葉子 

sb.Append("},"); 


sb.Remove(sb.Length - 1, 1); //去除掉最后一個多余的, 
sb.Append("]"); 
return Common.FormatToJson.MiniUiToJsonForTree(sb.ToString(), "工藝品類別"); 

/// <summary> 
/// 遞歸獲得父級ID下的所有類別json數據 
/// </summary> 
/// <param name="sb">json字符串</param> 
/// <param name="parentID">父級id</param> 
/// <param name="craftTypeList">類別信息集合</param> 
public void GetLeafTree(ref StringBuilder sb,int parentID,IEnumerable<crafttype> craftTypeList) 

sb.Append("["); 
foreach (crafttype leaf in craftTypeList) 

if (leaf.Belongsid == parentID) //根據雙親節點查找葉子 

sb.Append("{id:\"" + leaf.ID + "\",text:\"" + leaf.Name + "\""); 
sb.Append(",pid:\"" + parentID + "\"");//添加父節點 
sb.Append(",expanded:\"false\""); 
if (leaf.IsLeaf == "0")//如果是不是葉子節點,那么,就要遞歸添加children:[{xxx},內容 

sb.Append(",children:"); 
GetLeafTree(ref sb,(int)leaf.ID, craftTypeList);//遞歸追加葉子 

sb.Append("},"); 


sb.Remove(sb.Length - 1, 1); //去除掉最后一個多余的, 
sb.Append("]"); 


效果圖如下: 
一步一步asp.net ajax類別Tree生成
雖然是ajax實現,不過這個確實ajax一次性把數據全部加載進去,這樣對性能有嚴重的損失,不過考慮是后臺,所以,沒做處理,不過最好還是用第二種方法設計,那種方法是最好的解決方法,也適合前臺的數據展示. 
第二種方法正在實踐中………

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 嫩嫩的freehdxxx| 久久久www成人免费精品 | omofun 动漫在线观看 | 我爱我色成人网 | 日韩欧美高清片 | 国产精品久久久不卡 | 男人久久天堂 | 欧美a视频在线观看 | 大号bbwassbigav头交 | 亚洲一区在线免费视频 | 最近高清无吗免费看 | 免费激情视频网站 | 久草视频在线资源 | 天天草天天操 | 久操伊人 | 欧美 日韩 中文 | 日韩av官网 | 欧美成人免费一区二区三区 | 欧美成人a| 羞羞视频免费网站入口 | 国产免费高清在线 | 九九热在线视频观看这里只有精品 | 日韩激情 | 久久噜噜噜 | 日本黄色一级电影 | 亚洲影院在线播放 | 国产精品亚洲一区二区三区在线观看 | 欧美国产一区二区三区 | 欧美特级一级毛片 | 粉嫩粉嫩一区二区三区在线播放 | 国产乱淫a∨片免费观看 | 亚洲午夜天堂吃瓜在线 | 精品国产中文字幕 | 色婷婷av一区二区三区久久 | 欧美a级大胆视频 | 亚洲影视中文字幕 | 免费观看国产视频 | 欧美特黄一级高清免费的香蕉 | 国产一国产一级毛片视频 | 久久精品一二三区白丝高潮 | 国产黄色免费网站 |