<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        asp.net使用DataGridTree實現下拉樹的方法

        來源:懂視網 責編:小采 時間:2020-11-27 22:38:43
        文檔

        asp.net使用DataGridTree實現下拉樹的方法

        asp.net使用DataGridTree實現下拉樹的方法:本文實例講述了asp.net使用DataGridTree實現下拉樹的方法。分享給大家供大家參考。具體實現方法如下: 下拉樹實現原理:輸出json到客戶端,客戶端實現動態加載,中間不會和服務端交互。數據量支持上經測試幾千還是很快的。本下拉樹控件是用c#+js樹實現。
        推薦度:
        導讀asp.net使用DataGridTree實現下拉樹的方法:本文實例講述了asp.net使用DataGridTree實現下拉樹的方法。分享給大家供大家參考。具體實現方法如下: 下拉樹實現原理:輸出json到客戶端,客戶端實現動態加載,中間不會和服務端交互。數據量支持上經測試幾千還是很快的。本下拉樹控件是用c#+js樹實現。

        本文實例講述了asp.net使用DataGridTree實現下拉樹的方法。分享給大家供大家參考。具體實現方法如下:

        下拉樹實現原理:輸出json到客戶端,客戶端實現動態加載,中間不會和服務端交互。數據量支持上經測試幾千還是很快的。本下拉樹控件是用c#+js樹實現。

        2.c# 計算器 計算字符串數學表達式源碼

        計算數學表達式原理 采用c#實現 很實用
        //a.建立兩個棧:第一個位操作數棧,第二個操作符符棧!(將棧定義為string類型)
        //b.對數字來說是無條件壓入數字棧中.
        //c.而對符號來說,只有當前棧頂元素的優先值小于掃到的符號時(比如”+”小于”*”),此符號才壓入棧;否則大于等于的情況是將當前棧頂元素彈出棧,與當前數字棧的前兩個數字組成式子進行計算.計算結果當作數字壓入數字棧作為棧頂元素(要舍棄已經彈出的兩個數字),而那個掃描到的符號則將代替那個彈出的符號作為棧頂元素)。
        //d.最后說一下括號,原則是掃描到左括號時無條件壓入符號棧,而掃到右括號時,則彈出離棧頂最近的一個左括號以上的全部符號與數字棧的數字做運算

        3.asp.net教程 datagridtree表格樹控件 

        繼承asp.net的datagrid控件實現的表格樹控件
        /*表格樹控件說明
        * 此控件繼承datagrid 新增屬性說明:
        * 1.treeparentcode:頂級根節點parentcode
        * 2.treedisplaydeep:展現表格樹深度默認為1
        * 3.sumcolumns:自動匯總到根節點的字段集合 針對 decimal類型
        * 4.新增樹狀列模板templatetreecolumn 此模板繼承了templatecolumn 重寫了方法initializecell
        * 客戶端新增特性配置說明
        * 1.固定列 配置 itemstyle-css教程class='tdlockedclass'
        * 2.固定表頭 配置 headerstyle-cssclass='trlockedclass'
        * 3.文本框 input 或 <asp:textbox 配置事件onchange='sumparent(this);' 數字改變相應所有父節點也隨著改變 針對數字型 其他不支持
        * 不過可以自定義js
        * 報表說明:
        * 1.datagridtree.enableviewstate=false;提高加載速度
        * 2.動態定義列 實現 boundcolumn column = new boundcolumn();
        column.headertext = "動態列";
        column.datafield = "unitname";
        datagridnew.columns.add(column);
        * 也可以自定義默認模板 動態加載模板 定義模板例子templatetreecolumn,不用繼承templatecolumn,實現接口 itemplate initializecell 方法就可以了
        * 不足之處:1.對于復雜多行表頭 不知 如何實現
        * 2.表頭和列固定 數據量大時 會影響反映速度 一千左右的數據量 還時沒問題的 數據量在大的話 課考慮采用ajax動態加載 目前此功能還沒實現
        實例代碼
        代碼如下:private void maketree(datatable dtnodesets, string strparentcolumn, string strrootvalue, string strindexcolumn, string strtextcolumn, dropdownlist drpbind, int i)
        {
        //每向下一層,多一個縮入單位  
        i++;
        dataview dvnodesets = new dataview(dtnodesets);
        dvnodesets.rowfilter = strparentcolumn + "=" + strrootvalue;
        string strpading = ""; //縮入字符 
        //通過i來控制縮入字符的長度,我這里設定的是一個全角的空格  
        for (int j = 0; j < i; j++)
        strpading += " ";//如果要增加縮入的長度,改成兩個全角的空格就可以了 
        foreach (datarowview drv in dvnodesets)
        {
        treenode tnnode = new treenode();
        listitem li = new listitem(strpading + "├" + drv[strtextcolumn].tostring(), drv[strindexcolumn].tostring());
        drpbind.items.add(li);
        maketree(dtnodesets, strparentcolumn, drv[strindexcolumn].tostring(), strindexcolumn, strtextcolumn, drpbind, i);
        }
        //遞歸結束,要回到上一層,所以縮入量減少一個單位  
        i--;
        }
        /// <summary>  
        /// sql語句查詢,再綁定到droplist里面  
        /// </summary>  
        private void createtree()
        {
        //查詢zonelist  
        string sql = "select * from master_department where parent_department='003'";
        dataset ds = db.getds();
        datatable dt = ds.tables[0];
        maketree(dt, "parent_department", "003", "department_code", "department_name", dropdownlist1, -1);
        }
        網上找的另一個比較好的實例
        代碼如下:using system;
        using system.collections.generic;
        using system.text;
        using system.web.ui.webcontrols;
        namespace interface.common
        {
            public interface idropdowntree : idisposable
            {
                /**//// <summary>
                /// 返回dictionary里分別對應id,文本,如果沒有子節點返回null
                /// </summary>
                /// <param name="parentid">父節點id</param>
                /// <returns></returns>
                dictionary<string, string> getchildcategory(string parentid);
                /**//// <summary>
                /// 代碼里寫return new interface.common.dropdowntree(this);
                /// </summary>
                dropdowntree dropdowntree
                {
                    get;
                }
            }
            public sealed class dropdowntree
            {
                idropdowntree _dropdowntree;
                public dropdowntree(idropdowntree dropdowntree)
                {
                    _dropdowntree = dropdowntree;
                }
                /**//// <summary>
                /// 用于樹的前綴
                /// </summary>
                /// <param name="islast">是否是同級節點中的最后一個</param>
                /// <param name="haschild">本節點是否擁有子節點</param>
                /// <param name="parentstring">父節點前綴符號</param>
                /// <returns>本節點的前綴</returns>
                private string getprefix(bool islast, bool haschild, string parentstring)
                {
                    string result = string.empty;
                    if (!string.isnullorempty(parentstring))
                    {
                        parentstring = parentstring.remove(parentstring.length - 1).replace("├", "│").replace("└", " ");
                        result += parentstring;
                    }
                    if (islast)
                    {
                        result += "└";
                    }
                    else
                    {
                        result += "├";
                    }
                    if (haschild)
                    {
                        result += "┬";
                    }
                    else
                    {
                        result += "─";
                    }
                    return result;
                }
                綁定下拉菜單#region 綁定下拉菜單
                /**//// <summary>
                /// 綁定連動級的下拉菜單
                /// </summary>
                /// <param name="ddlgoodstype">傳進一個被綁定的dropdownlist</param>
                /// <param name="removeid">被排除綁定的節點id</param>
                /// <param name="autodispose">是否自動釋放</param>
                public void bindtodropdownlist(dropdownlist ddlgoodstype, string removeid,string parentid, bool autodispose)
                {
                    if (ddlgoodstype != null)
                    {
                        listitem listitem = null;
                        string currentid = parentid;//根節點/父id
                        string currentsign = string.empty;//當前節點符號;
                        string parrentsign = string.empty; //父節點符號;
                        bool haschild = true;//是否有子
                        queue<string> parentkeylist = new queue<string>();//存 有子節點的 節點id
                        queue<string> parentsignlist = new queue<string>();//對應節點id的前綴符號
                        int itemindexof = 0;//父節點所在的位置 
                        while (haschild)
                        {
                            int lastonecount = 1;//用于計算在同級別中是否最后一個
                            dictionary<string, string> childlist = _dropdowntree.getchildcategory(currentid);// 得到子節點列表
                            if (childlist != null && childlist.count > 0)
                            {
                                if (!string.isnullorempty(removeid) && childlist.containskey(removeid))
                                {
                                    childlist.remove(removeid);
                                }
                                foreach (keyvaluepair<string, string> entry in childlist)
                                {
                                    if (_dropdowntree.getchildcategory(entry.key) != null)//存在子
                                    {
                                        currentsign = getprefix(lastonecount == childlist.count, true, parrentsign);
                                        listitem = new listitem(currentsign + entry.value, entry.key);
                                        parentkeylist.enqueue(entry.key);//當前的節點id
                                        parentsignlist.enqueue(currentsign);//當前的節點符號
                                    }
                                    else//不存在子
                                    {
                                        currentsign = getprefix(lastonecount == childlist.count, false, parrentsign);
                                        listitem = new listitem(currentsign + entry.value, entry.key);
                                    }
                                    if (ddlgoodstype.items.count != 0)
                                    {
                                        itemindexof = string.isnullorempty(currentid) ? itemindexof + 1 : ddlgoodstype.items.indexof(ddlgoodstype.items.findbyvalue(currentid)) + lastonecount;
                                    }
                                    ddlgoodstype.items.insert(itemindexof, listitem);//添加子節點
                                    lastonecount++;
                                }
                                if (parentkeylist.count > 0)//存在子節點時
                                {
                                    currentid = parentkeylist.dequeue();
                                    parrentsign = parentsignlist.dequeue();
                                }
                                else
                                {
                                    haschild = false;
                                }
                            }
                            else
                            {
                                break;
                            }
                        }
                        if (autodispose)
                        {
                            _dropdowntree.dispose();
                        }
                    }
                }
                /**//// <summary>
                /// 綁定連動級的下拉菜單
                /// </summary>
                /// <param name="ddlgoodstype">傳進一個被綁定的dropdownlist</param>
                public void bindtodropdownlist(dropdownlist ddlgoodstype)
                {
                    bindtodropdownlist(ddlgoodstype, string.empty,null, true);
                }
                /**//// <summary>
                /// 綁定連動級的下拉菜單
                /// </summary>
                /// <param name="ddlgoodstype">傳進一個被綁定的dropdownlist</param>
                /// <param name="removeid">被排除的id</param>
                public void bindtodropdownlist(dropdownlist ddlgoodstype, string removeid)
                {
                    bindtodropdownlist(ddlgoodstype, removeid,null, true);
                }
                /**//// <summary>
                /// 綁定連動級的下拉菜單
                /// </summary>
                /// <param name="ddlgoodstype">傳進一個被綁定的dropdownlist</param>
                /// <param name="removeid">被排除的id,若沒有,傳null</param>
                /// <param name="parentid">起始父id</param>
                public void bindtodropdownlist(dropdownlist ddlgoodstype, string removeid,string parentid)
                {
                    bindtodropdownlist(ddlgoodstype, removeid,parentid, true);
                }
                #endregion
            }
        }
        調用方法很簡單:
        1.繼承自idropdowntree接口
        2.實現3個接口方法實現接口代碼示例[dispose方法自己實現],最主要的是自己實現獲得子級的方法
        代碼如下:idropdowntree 成員
        #region idropdowntree 成員
        public dictionary<string, string> getchildcategory(string parentid)
        {
            string where = "parentid='" + parentid + "'";
            if (string.isnullorempty(parentid))
            {
         where = "parentid is null or parentid='" + guid.empty + "'";
            }
            list<goodscategorybean> _goodscategorylist = selectlist(0, where, string.empty, false);
            if (_goodscategorylist != null && _goodscategorylist.count > 0)
            {
         dictionary<string, string> categorylist = new dictionary<string, string>();
         for (int i = 0; i < _goodscategorylist.count; i++)
         {
             categorylist.add(_goodscategorylist[i].id.tostring(), _goodscategorylist[i].gategoryname);
         }
         return categorylist;
            }//51aspx.com
            return null;
        }
        public interface.common.dropdowntree dropdowntree
        {
            get { return new interface.common.dropdowntree(this); }
        }
        #endregion
        頁面調用代碼: 類名.dropdowntree.bindtodropdownlist(下拉控件id);

        希望本文所述對大家的asp.net程序設計有所幫助。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        asp.net使用DataGridTree實現下拉樹的方法

        asp.net使用DataGridTree實現下拉樹的方法:本文實例講述了asp.net使用DataGridTree實現下拉樹的方法。分享給大家供大家參考。具體實現方法如下: 下拉樹實現原理:輸出json到客戶端,客戶端實現動態加載,中間不會和服務端交互。數據量支持上經測試幾千還是很快的。本下拉樹控件是用c#+js樹實現。
        推薦度:
        標簽: 實現 下拉 ASP.NET
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 免费a级毛片无码a∨蜜芽试看 | 国产亚洲精品bv在线观看| 久久精品国产免费| 亚洲精品午夜国产VA久久成人| 人体大胆做受免费视频| www.91亚洲| 四虎影视无码永久免费| 国产亚洲av片在线观看16女人 | 成人免费视频88| 亚洲AV成人精品日韩一区| 免费无码黄动漫在线观看| 国产亚洲一卡2卡3卡4卡新区 | 可以免费看黄的网站| 日韩亚洲产在线观看| 国产人成免费视频| 一区二区三区免费看| 亚洲桃色AV无码| 222www免费视频| 亚洲色偷偷色噜噜狠狠99网| 免费日本黄色网址| a级毛片免费播放| 亚洲国产日韩在线成人蜜芽| 手机在线毛片免费播放| 男人和女人高潮免费网站| 久久国产亚洲电影天堂| 免费福利网站在线观看| 黄页网址在线免费观看| 亚洲国产精品无码久久久蜜芽| 五月婷婷在线免费观看| 国产亚洲欧美在线观看| 亚洲AV无码乱码在线观看裸奔 | 久久狠狠爱亚洲综合影院| 国产免费观看青青草原网站| 国产午夜成人免费看片无遮挡| 亚洲理论精品午夜电影| 又黄又大又爽免费视频| 99在线热视频只有精品免费| 亚洲国产AV无码一区二区三区| 亚洲日韩aⅴ在线视频| 免费的涩涩视频在线播放| 今天免费中文字幕视频|