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

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

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

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

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

遞歸查詢,和雙循環(huán)嵌套的執(zhí)行sql語句沒什么區(qū)別了......

這樣帶來的是嚴(yán)重的性能問題..

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

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

第二種:

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

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

首先,要設(shè)計好數(shù)據(jù)庫,方便以后兩種方式擴展,

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

前臺代碼:
復(fù)制代碼 代碼如下:

!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>產(chǎn)品類別管理/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>產(chǎn)品類別管理/h1>
div class="mini-panel" title="產(chǎn)品類別管理" 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">移動節(jié)點/li>-->
li class="separator">/li>
li name="addNode" onclick="onAddNode" iconCls="icon-add">插入節(jié)點/li>
li name="edit" iconCls="icon-edit" onclick="onEditNode">編輯節(jié)點/li>
li name="remove" iconCls="icon-remove" onclick="onRemoveNode">刪除節(jié)點/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("請輸入類別內(nèi)容:", "請輸入",
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("請輸入類別內(nèi)容:", "請輸入",
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("確定刪除選中節(jié)點?")) {
//這里提交到服務(wù)器
$.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") { //如果根節(jié)點(總根目錄,那么阻止菜單顯示)
// e.cancel = true;
// //阻止瀏覽器默認(rèn)右鍵菜單
// 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數(shù)據(jù)遞歸生成:
BLL中獲得Tree的json數(shù)據(jù)
復(fù)制代碼 代碼如下:

/// summary>
/// 工藝品類別樹轉(zhuǎn)化為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\"");//添加父節(jié)點
sb.Append(",expanded:\"false\"");
if (root.IsLeaf == "0")//如果是不是葉子節(jié)點,那么,就要遞歸添加children:[{xxx},內(nèi)容
{
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數(shù)據(jù)
/// /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) //根據(jù)雙親節(jié)點查找葉子
{
sb.Append("{id:\"" + leaf.ID + "\",text:\"" + leaf.Name + "\"");
sb.Append(",pid:\"" + parentID + "\"");//添加父節(jié)點
sb.Append(",expanded:\"false\"");
if (leaf.IsLeaf == "0")//如果是不是葉子節(jié)點,那么,就要遞歸添加children:[{xxx},內(nèi)容
{
sb.Append(",children:");
GetLeafTree(ref sb,(int)leaf.ID, craftTypeList);//遞歸追加葉子
}
sb.Append("},");
}
}
sb.Remove(sb.Length - 1, 1); //去除掉最后一個多余的,
sb.Append("]");
}

效果圖如下:

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

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

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《一步一步asp.net ajax類別Tree生成》,本文關(guān)鍵詞  一步,asp.net,ajax,類別,Tree,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《一步一步asp.net ajax類別Tree生成》相關(guān)的同類信息!
  • 本頁收集關(guān)于一步一步asp.net ajax類別Tree生成的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    高潮精品一区videoshd| 午夜激情久久久| 欧美成人在线直播| 日韩一区二区三区免费看| 欧美日韩aaa| 91精品婷婷国产综合久久竹菊| 欧美视频中文一区二区三区在线观看 | 成人ar影院免费观看视频| 国产麻豆一精品一av一免费 | 成人网男人的天堂| 国内精品在线播放| 激情综合网激情| 韩国av一区二区三区四区| 国产真实精品久久二三区| 美女脱光内衣内裤视频久久网站 | 成人91在线观看| 色综合天天综合给合国产| www.久久久久久久久| 在线观看亚洲专区| 91精品在线免费| ww亚洲ww在线观看国产| 国产精品狼人久久影院观看方式| 久久品道一品道久久精品| 国产精品久久久久久一区二区三区 | 久久色.com| 专区另类欧美日韩| 免费在线一区观看| 丁香激情综合五月| 91福利社在线观看| 日韩亚洲欧美中文三级| 国产亚洲欧美在线| 亚洲欧美一区二区三区久本道91 | 国产毛片精品国产一区二区三区| 91小视频在线观看| 日韩三级av在线播放| 国产精品你懂的在线| 亚洲国产日日夜夜| 懂色中文一区二区在线播放| 欧美视频第二页| 久久久久久久久99精品| 中日韩免费视频中文字幕| 五月婷婷综合网| 国产精品亚洲一区二区三区在线| 色婷婷精品久久二区二区蜜臂av| 欧美一区二区三区四区久久| 亚洲国产成人午夜在线一区| 日本在线不卡一区| 91国产免费观看| 久久蜜臀精品av| 日韩中文字幕1| 欧美在线色视频| 国产精品婷婷午夜在线观看| 麻豆精品新av中文字幕| 欧美亚洲国产bt| 国产欧美一区二区精品秋霞影院| 爽爽淫人综合网网站| 色偷偷久久人人79超碰人人澡| 久久久九九九九| 日韩成人精品视频| 91麻豆精品国产91久久久久久久久 | 99久久国产综合精品色伊| 337p日本欧洲亚洲大胆精品| 强制捆绑调教一区二区| 欧洲一区二区av| 亚洲免费在线视频一区 二区| 国产精品一二三四区| 精品久久久久久久久久久久久久久 | 7777精品伊人久久久大香线蕉经典版下载 | 亚洲成av人片www| 欧美性大战久久久久久久 | 欧美国产欧美综合| 国产激情视频一区二区三区欧美| 欧美不卡视频一区| 国产中文一区二区三区| 久久九九99视频| 高清成人在线观看| 国产精品不卡一区| www.一区二区| 中文字幕日本乱码精品影院| 成人国产精品免费观看视频| 国产精品久久久久久妇女6080 | 天天av天天翘天天综合网| 在线亚洲精品福利网址导航| 亚洲福利电影网| 在线不卡一区二区| 国产一区二区三区四| 欧美精品一区二区在线播放| 国产一区二区美女| 国产精品欧美一区喷水| 91久久精品一区二区三| 日韩国产精品久久久| 欧美成人a在线| av一二三不卡影片| 亚洲韩国精品一区| 欧美一区二区三区在| 国产一区美女在线| 亚洲女同ⅹxx女同tv| 4hu四虎永久在线影院成人| 国内一区二区在线| 又紧又大又爽精品一区二区| 日韩欧美亚洲国产另类| 国产成人精品网址| 婷婷一区二区三区| 国产日韩欧美综合在线| 欧美亚洲一区二区在线观看| 日本欧美肥老太交大片| 国产精品超碰97尤物18| 日韩天堂在线观看| 99re热视频这里只精品| 久久精品免费看| 中文字幕佐山爱一区二区免费| 欧美一区二区视频免费观看| 国产乱子伦一区二区三区国色天香| 亚洲蜜臀av乱码久久精品蜜桃| 日韩三级电影网址| 欧美性一二三区| 不卡免费追剧大全电视剧网站| 天天综合色天天| 国产丝袜美腿一区二区三区| 91精品国产色综合久久ai换脸| 成a人片亚洲日本久久| 蜜桃av一区二区三区| 一区二区三区免费| 亚洲国产激情av| 日韩美女天天操| 欧美自拍偷拍午夜视频| 懂色av一区二区夜夜嗨| 日本亚洲视频在线| 亚洲gay无套男同| 亚洲国产精品黑人久久久| 久久午夜羞羞影院免费观看| 欧美性xxxxx极品少妇| 成人精品国产一区二区4080| 久久精品国产99| 蜜桃精品视频在线| 亚洲不卡av一区二区三区| 亚洲人午夜精品天堂一二香蕉| 久久免费视频一区| 精品国产乱码久久久久久久 | 欧美大片在线观看一区二区| 欧美一区二视频| 91麻豆精品国产自产在线 | 高潮精品一区videoshd| 精品一区二区免费视频| 日韩精品五月天| 免费成人在线观看| 日韩高清一级片| 日韩1区2区3区| 日韩va欧美va亚洲va久久| 性做久久久久久免费观看欧美| 1024成人网| 亚洲女厕所小便bbb| 依依成人精品视频| 亚洲影院久久精品| 午夜成人在线视频| 日本不卡视频在线| 激情五月婷婷综合| 国产成人免费在线视频| 成人网页在线观看| 91色九色蝌蚪| 91福利社在线观看| 欧美一级欧美三级| 久久精品一区二区三区av| 欧美国产一区视频在线观看| 亚洲欧洲精品一区二区三区不卡| 亚洲天堂成人在线观看| 水野朝阳av一区二区三区| 五月天亚洲精品| 久久国产精品72免费观看| 国产盗摄女厕一区二区三区| 成人av网站在线观看免费| 欧美最猛性xxxxx直播| 日韩欧美激情在线| 国产精品网曝门| 午夜欧美视频在线观看| 国产一区二区美女| 在线免费观看视频一区| 日韩女同互慰一区二区| 国产精品女同互慰在线看| 亚洲狠狠爱一区二区三区| 国产一区二区三区四| 欧美系列亚洲系列| 日韩视频在线一区二区| 亚洲色图在线播放| 免费av成人在线| 色老汉一区二区三区| 精品久久久久香蕉网| 亚洲美女在线一区| 国产伦精品一区二区三区免费迷| 91久久精品午夜一区二区| 久久亚洲免费视频| 亚洲二区在线视频| 国产精品原创巨作av| 欧美精品1区2区| 在线播放一区二区三区| 日产欧产美韩系列久久99| 国产日韩亚洲欧美综合| 欧美亚洲国产怡红院影院| 久久国产精品无码网站| 国产成人av一区二区三区在线观看|