婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 一步一步asp.net ajax類別Tree生成

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

熱門標簽:陜西人工外呼系統哪家好 廈門商鋪地圖標注 地圖標注多個行程 浙江外呼系統怎么安裝 上海楊浦怎么申請申請400電話 云南外呼電銷機器人系統 海外地圖標注門市標 山西防封卡電銷卡套餐 銅川小型外呼系統運營商

雖然實現了類別多級的問題這樣帶來的后果確實無窮無盡的.............

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

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

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

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

第二種:

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

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

首先,要設計好數據庫,方便以后兩種方式擴展,

這樣設計,主要是考慮方便前臺后臺的擴展,FId字段是一個為了方便前臺查詢而設計的,這樣設計的好處就是如果查詢比如頂級菜單下的所有產品,只需要根據模糊查詢前綴匹配,就能把所有的產品都查詢出來,設計的字段還是有點小,IsLeaf是為了判斷是否是葉子節點,BelongSid父級id,

前臺代碼:
復制代碼 代碼如下:

!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" title="產品類別管理" iconCls="icon-add" style="width:100%;height:500px;"
showToolbar="true" showCollapseButton="true" showFooter="true"
>
!--toolbar-->
div property="toolbar">
/div>
!--footer-->
div property="footer">
/div>
!--body-->
ul id="tree1" class="mini-tree" url="Data/GetProductInfo.ashx?method=GetProductType" style="width:100%;height:100%;padding:5px;"
showTreeIcon="true" textField="text" idField="id" contextMenu="#treeMenu"
>
/ul>
ul id="treeMenu" class="mini-menu" style="display:none;" onbeforeopen="onBeforeOpen">
!-- li name="move" iconCls="icon-move" onclick="onMoveNode">移動節點/li>-->
li class="separator">/li>
li name="addNode" onclick="onAddNode" iconCls="icon-add">插入節點/li>
li name="edit" iconCls="icon-edit" onclick="onEditNode">編輯節點/li>
li name="remove" iconCls="icon-remove" onclick="onRemoveNode">刪除節點/li>
li name="cancel" iconCls="icon-cancel" onclick="onCancel">取消/li>
li class="separator">/li>
/ul>
/div>
br />br />
/div>
script type="text/javascript">
mini.parse();
var AddTpye="add";
function onCancel(e){
var tree=mini.get("tree1");
var node=tree.getSelectedNode();
tree.isExpandedNode (node);
}
function onAddBefore(e) {
AddType="before";
AddItem(e);
}
function onAddAfter(e)
{
AddType="after";
AddItem(e);
}
function AddItem(e) {
var tree = mini.get("tree1");
var node = tree.getSelectedNode();
var newNode = {id:0,text:"空",pid:node.id};
mini.prompt("請輸入類別內容:", "請輸入",
function (action, value) {
if (action == "ok"){
$.ajax({
url:"Data/GetProductInfo.ashx",
type:"post",
data:"method=AddProductTypetext="+value+"pid="+node.id+"IsLeaf="+tree.isLeaf(node),
success:function(msg){
if(msg){
alert("添加成功!");
TreeLoad();
// newNode.text=value;
// if(node!=null){
//
// tree.addNode(newNode, AddType, node);
// }
}
else
alert("添加失敗!");
}
});
}
else {
newNode.text="空";
}
});
}
//刷新樹
function TreeLoad(){
$.ajax({
url:"Data/GetProductInfo.ashx?method=GetProductType",
type:"json",
success:function(json){
var tree = mini.get("tree1");
// alert(json);
var data= eval("("+json+")");
tree.loadData(data);
}
});
}
function onAddNode(e) {
AddType="add";
AddItem(e);
}
function onEditNode(e) {
var tree = mini.get("tree1");
var node = tree.getSelectedNode();
mini.prompt("請輸入類別內容:", "請輸入",
function (action, value) {
if (action == "ok") {
$.ajax({
url:"Data/GetProductInfo.ashx",
type:"post",
data:"method=SaveProductTypeid="+node.id+"text="+value+"pid="+node.pid+"IsLeaf="+tree.isLeaf(node),
success:function(msg){
if(msg){
alert("保存成功!");
tree.setNodeText(node,value);
//TreeLoad();
}
else
alert("保存失敗!");
}
});
}
});
}
function onRemoveNode(e) {
var tree = mini.get("tree1");
var node = tree.getSelectedNode();
if (node) {
if (confirm("確定刪除選中節點?")) {
//這里提交到服務器
$.ajax({
url:"Data/GetProductInfo.ashx",
type:"post",
data:"method=RemoveProductTypeid="+node.id,
success:function(msg){
if(msg){
tree.removeNode(node);
alert("刪除成功!");
}
else{
alert("刪除失敗!");
}
}
});
}
}
}
function onBeforeOpen(e) {
var menu = e.sender;
var tree = mini.get("tree1");
var node = tree.getSelectedNode();
// if (node node.id == "-1") { //如果根節點(總根目錄,那么阻止菜單顯示)
// e.cancel = true;
// //阻止瀏覽器默認右鍵菜單
// e.htmlEvent.preventDefault();
// return;
// }
////////////////////////////////
var editItem = mini.getbyName("edit", menu);
var removeItem = mini.getbyName("remove", menu);
var addNodeItem=mini.getbyName("addNode",menu);
//var moveItem=mini.getbyName("move",menu);
editItem.show();
removeItem.show();
addNodeItem.show();
if (node.id == "-1") {//總根目錄
removeItem.hide();
// moveItem.hide();
}
}
/script>
/body>
/html>

這一個難點在于json數據遞歸生成:
BLL中獲得Tree的json數據
復制代碼 代碼如下:

/// summary>
/// 工藝品類別樹轉化為json格式
/// /summary>
/// returns>/returns>
public string craftTypeTreeToJson()
{
//傳遞的json格式
IEnumerablecrafttype> 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,IEnumerablecrafttype> 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("]");
}

效果圖如下:

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

標簽:許昌 萊蕪 自貢 孝感 常州 信陽 朔州 西雙版納

巨人網絡通訊聲明:本文標題《一步一步asp.net ajax類別Tree生成》,本文關鍵詞  一步,asp.net,ajax,類別,Tree,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《一步一步asp.net ajax類別Tree生成》相關的同類信息!
  • 本頁收集關于一步一步asp.net ajax類別Tree生成的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    成人爱爱电影网址| 日韩精品亚洲专区| 国产在线一区观看| 99精品视频在线播放观看| 91成人免费在线视频| 色狠狠桃花综合| 国产亚洲一区二区三区在线观看| 亚洲精品亚洲人成人网在线播放| 国产一区免费电影| 欧亚洲嫩模精品一区三区| 国产精品久久久久桃色tv| 久久av资源站| 精品国产免费人成电影在线观看四季 | 精品国产人成亚洲区| 亚洲一区二区三区四区的| 国产成+人+日韩+欧美+亚洲| 精品国产1区二区| 国产美女在线观看一区| 欧美一级二级三级乱码| 五月婷婷激情综合| 精品国产乱码久久久久久免费| 亚洲国产一区二区视频| 日韩一级在线观看| 欧美巨大另类极品videosbest | 麻豆91在线播放免费| 亚洲四区在线观看| 亚洲成av人片在www色猫咪| 亚洲女爱视频在线| 久久久精品国产99久久精品芒果 | 成人avav在线| 中文一区二区完整视频在线观看 | 一区二区三区蜜桃网| 亚洲高清不卡在线| 精品福利视频一区二区三区| 欧美艳星brazzers| 成人中文字幕合集| 五月综合激情日本mⅴ| 日韩一区二区电影在线| 国产精品久久久久7777按摩 | 久久精品无码一区二区三区| 亚洲一区在线视频| **性色生活片久久毛片| 亚洲黄色尤物视频| 91精品国产综合久久久久久久久久| 久久99精品国产| 亚洲精品菠萝久久久久久久| 精品国内二区三区| 这里是久久伊人| 欧美午夜片在线观看| 热久久国产精品| 日韩综合在线视频| 亚洲一区二区三区四区不卡| 国产精品国产三级国产有无不卡 | 久久伊99综合婷婷久久伊| 91麻豆视频网站| 成人av影院在线| 激情深爱一区二区| 韩国女主播成人在线观看| 亚洲成a人v欧美综合天堂下载| 1区2区3区精品视频| 国产99久久久国产精品潘金| 亚洲精品久久久蜜桃| 奇米精品一区二区三区在线观看| 香蕉久久一区二区不卡无毒影院| 麻豆精品久久久| 99精品黄色片免费大全| 欧美美女直播网站| 亚洲男同1069视频| 日本道在线观看一区二区| 亚洲一级在线观看| 亚洲免费观看高清完整版在线| 欧美精品tushy高清| 高清成人在线观看| 麻豆91精品91久久久的内涵| 国产精品成人免费在线| 51久久夜色精品国产麻豆| 久久久久青草大香线综合精品| 久久精品国产久精国产| 免费看日韩精品| 制服丝袜国产精品| 国产乱子伦视频一区二区三区 | 夜夜爽夜夜爽精品视频| 国产精品美女久久久久高潮| 亚洲激情第一区| 亚洲第一成人在线| 国产一区在线精品| 欧美日韩视频一区二区| 国产区在线观看成人精品| 日韩av高清在线观看| 日本道色综合久久| 中文字幕日韩一区二区| 日韩制服丝袜av| 欧美性猛片aaaaaaa做受| 国产精品国产三级国产普通话三级 | 在线免费观看日本一区| 波多野结衣中文字幕一区二区三区| 日韩欧美美女一区二区三区| 日韩av不卡在线观看| 国产精品久久夜| 欧美一卡2卡3卡4卡| 国产精品一区一区三区| 亚洲人123区| 欧美精品久久一区二区三区| 精品一区二区三区免费观看| 日韩一区二区三区在线| 中文字幕一区二区三区色视频 | 欧美日韩夫妻久久| 久久在线观看免费| 风间由美中文字幕在线看视频国产欧美| 欧美日韩黄色一区二区| 亚洲精品在线电影| 高清视频一区二区| 日韩亚洲电影在线| 精品一区二区三区免费播放| 欧美日韩国产影片| 久久久久亚洲蜜桃| 亚洲18影院在线观看| 日韩欧美国产电影| 91女人视频在线观看| 国产福利一区在线| 天天操天天干天天综合网| 亚洲靠逼com| 一区二区三区.www| 一区二区三区在线观看欧美| 综合激情网...| 亚洲美女电影在线| 亚洲女同ⅹxx女同tv| 亚洲视频在线一区观看| 亚洲欧洲制服丝袜| 一区二区三区精品在线观看| **性色生活片久久毛片| 亚洲激情综合网| 亚洲欧美一区二区三区孕妇| ㊣最新国产の精品bt伙计久久| 国产精品嫩草久久久久| 国产精品看片你懂得| 亚洲精品乱码久久久久久黑人| 亚洲综合色视频| 丝袜诱惑制服诱惑色一区在线观看| 日韩av在线播放中文字幕| 老鸭窝一区二区久久精品| 精品一区二区三区的国产在线播放| 麻豆高清免费国产一区| 国产综合久久久久久鬼色| 亚洲午夜视频在线| 国内久久婷婷综合| 日韩欧美的一区| 亚洲成人福利片| 国产成人亚洲精品狼色在线| 欧美三级日韩三级| 亚洲免费av网站| 国产二区国产一区在线观看| 99视频精品在线| 成人黄色大片在线观看| 精品一区二区在线视频| 日本免费新一区视频| 美腿丝袜亚洲一区| 日日噜噜夜夜狠狠视频欧美人 | 国产一区二区三区黄视频| 欧美电视剧免费全集观看| 99精品1区2区| 17c精品麻豆一区二区免费| 精品免费视频一区二区| 亚洲综合一区二区精品导航| 一区二区三区免费| 午夜一区二区三区视频| 一区二区三区在线观看欧美 | 欧美日韩一区二区三区四区五区| 91精品国产乱| 一区二区三区免费看视频| 成人看片黄a免费看在线| 久久综合久久久久88| 久久国产精品第一页| 久久色.com| 国产精品69毛片高清亚洲| 亚洲精品在线观看视频| 高清在线不卡av| 久久久久久久久久电影| 成人午夜精品一区二区三区| 国产精品国产三级国产aⅴ入口| 国产激情91久久精品导航| 专区另类欧美日韩| 色婷婷激情久久| 午夜私人影院久久久久| 3atv一区二区三区| 久久福利资源站| 国产精品二三区| 欧美精品一二三| 丁香亚洲综合激情啪啪综合| 亚洲小少妇裸体bbw| 欧美一二三区在线观看| 韩国精品主播一区二区在线观看 | 色先锋aa成人| 一区二区三区视频在线观看| 久久中文字幕电影| 久久综合九色综合97婷婷女人 | 亚洲午夜免费视频| 丝袜诱惑亚洲看片| 久久久高清一区二区三区| 麻豆91在线播放|