<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 TreeView來構建用戶選擇輸入的方法 推薦

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

        Asp.net TreeView來構建用戶選擇輸入的方法 推薦

        Asp.net TreeView來構建用戶選擇輸入的方法 推薦:一般的單項數據選擇可以使用DropdownList控件來實現,但對于有多個選擇性輸入,而且輸入有層次關系的內容,最好選擇TreeView控件來實現。 本文介紹如何使用使用TreeView控件來有效獲取用戶的輸入,其中涉及到TreeView控件的級聯選擇、去掉節點HTML鏈接變
        推薦度:
        導讀Asp.net TreeView來構建用戶選擇輸入的方法 推薦:一般的單項數據選擇可以使用DropdownList控件來實現,但對于有多個選擇性輸入,而且輸入有層次關系的內容,最好選擇TreeView控件來實現。 本文介紹如何使用使用TreeView控件來有效獲取用戶的輸入,其中涉及到TreeView控件的級聯選擇、去掉節點HTML鏈接變

        一般的單項數據選擇可以使用DropdownList控件來實現,但對于有多個選擇性輸入,而且輸入有層次關系的內容,最好選擇TreeView控件來實現。

        本文介紹如何使用使用TreeView控件來有效獲取用戶的輸入,其中涉及到TreeView控件的級聯選擇、去掉節點HTML鏈接變為展開目錄、獲取選擇內容、如何構造數據庫的信息變為樹形內容以及彈出窗口使用等知識點,本文輸入應用級別的例子,希望能做個記號,對己對人,皆為利好!^_^

        本文的經營范圍是一個可以輸入分類及詳細子內容的,由于內容繁多,而且具有一定的層次關系,因此,不適合采用DropdownList和CheckboxList控件,因此采用了帶CheckBox屬性的TreeView控件來輔助用戶的輸入。

        輸入界面大致如下所示,用戶通過選擇按鈕,觸發彈出對話框,在對話框中放置了TreeView控件。

        在彈出的對話框中,放置的TreeView控件,一個帶有CheckBox,可以方便用戶選擇,并且具有級聯(通過Javascript實現,減少Post回發),另外由于內容比較多,我設置了展開的級別層次。

         

        用戶通過選擇或者反選大類,可以選擇或反選其列表下面的所有項目,也可以單獨選擇子項目。

         

         

        由于通過Javascript不太好獲取并組裝返回的內容,本文通過了在后臺遍歷樹的方式對返回值進行處理,然后在父窗體的Javascript中對返回值進行了綁定,使其在界面控件中得以顯示指定格式的內容。

         

         

        以下為HTML的代碼,其中OnTreeNodeChecked為級聯Javascript函數,SubmitValue為對返回值進行綁定的操作。
        代碼
        代碼如下:


        <div class="search">
        <span>
        <asp:ImageButton ID="btnSelect" runat="server"
        ImageUrl="~/Themes/Default/btn_select.gif" onclick="btnSelect_Click"
        />
        <asp:ImageButton ID="btnClose" runat="server" OnClientClick="javascript:window.close();return false;"
        ImageUrl="~/Themes/Default/btn_close.gif" />
        </span>
        <table cellspacing="0" cellpadding="0" border="0" width="100%">
        <tr>
        <td class="ico">
         
        </td>
        <td class="form">
        <asp:TreeView ID="TreeView1" runat="server" onclick="OnTreeNodeChecked();" ShowCheckBoxes="All"
        ShowLines="True" ExpandDepth="1" Font-Bold="False" ForeColor="#0000CC">
        </asp:TreeView>
        </td>
        </tr>
        </table>
        </div>
        <script language='javascript' type='text/javascript'>
        function OnTreeNodeChecked() {
        var ele = event.srcElement;
        if (ele.type == 'checkbox') {
        var childrenDivID = ele.id.replace('CheckBox', 'Nodes');
        var div = document.getElementById(childrenDivID);
        if (div == null) return;
        var checkBoxs = div.getElementsByTagName('INPUT');
        for (var i = 0; i < checkBoxs.length; i++) {
        if (checkBoxs[i].type == 'checkbox')
        checkBoxs[i].checked = ele.checked;
        }
        }
        }
        function SubmitValue() {
        var val = "";
        var returnVal = new Array();
        var inputs = document.all.tags("INPUT");
        var n = 0;
        for (var i = 0; i < inputs.length; i++) // 遍歷頁面上所有的 input
        {
        if (inputs[i].type == "checkbox") {
        if (inputs[i].checked) {
        var strValue = inputs[i].value;
        val += strValue + ',';
        //returnVal[n] = val;
        n = n + 1;
        }
        } //if(inputs[i].type="checkbox")
        } //for
        window.returnValue = val;
        window.close();
        }
        </script>

        下面代碼是頁面的后臺代碼,其中展示了如何對樹進行數據綁定,使其能夠顯示有層次格式的內容,其中AddTreeNode是一個遞歸函數。btnSelect_Click事件處理函數,專門對返回的數據進行組裝,以一定的格式顯示到客戶端的控件輸入上。
        代碼
        代碼如下:

        protected void Page_Load(object sender, EventArgs e)
        {
        if (!this.IsPostBack)
        {
        BindData();
        }
        }
        private void BindData()
        {
        ArrayList scopeTree = BLLFactory<BusinessScope>.Instance.GetTree();
        foreach (BusinessScopeNodeInfo nodeInfo in scopeTree)
        {
        TreeNode node = new TreeNode(nodeInfo.Name);
        node.SelectAction = TreeNodeSelectAction.Expand;
        this.TreeView1.Nodes.Add(node);
        AddTreeNode(node, nodeInfo);
        }
        }
        private void AddTreeNode(TreeNode parentNode, BusinessScopeNodeInfo nodeInfo)
        {
        TreeNode treeNode = null;
        foreach (BusinessScopeNodeInfo subNodeInfo in nodeInfo.Children)
        {
        treeNode = new TreeNode(subNodeInfo.Name);
        treeNode.SelectAction = TreeNodeSelectAction.Expand;
        parentNode.ChildNodes.Add(treeNode);
        AddTreeNode(treeNode, subNodeInfo);
        }
        }
        protected void btnSelect_Click(object sender, ImageClickEventArgs e)
        {
        string result = "";
        foreach (TreeNode parent in this.TreeView1.Nodes)
        {
        foreach (TreeNode node in parent.ChildNodes)
        {
        StringBuilder sb = new StringBuilder();
        foreach (TreeNode subNode in node.ChildNodes)
        {
        if (subNode.Checked)
        {
        sb.AppendFormat("{0},", subNode.Text);
        }
        }
        if (sb.Length > 0)
        {
        sb.Insert(0, string.Format("{0}(", node.Text));
        sb.Append(")");
        result += sb.ToString().Replace(",)", ")") + ";";
        }
        else if (node.Checked)
        {
        result += node.Text;
        }
        }
        }
        Helper.CloseWin(this, result.Trim(';'));
        }

        其中數的數據組裝也是需要注意的一個地方,為了提高效率,避免頻繁查找數據庫,我們先把符合條件的數據放到DataTable,然后通過對象的Select在內存中查找,這樣可以很好的提高遞歸函數的查找效率。
        代碼
        代碼如下:

        /// <summary>
        /// 獲取數據樹
        /// </summary>
        /// <returns></returns>
        public ArrayList GetTree()
        {
        ArrayList arrReturn = new ArrayList();
        string sql = string.Format("Select * From {0} Order By PID, Seq ", tableName);
        Database db = DatabaseFactory.CreateDatabase();
        DbCommand cmdWrapper = db.GetSqlStringCommand(sql);
        DataSet ds = db.ExecuteDataSet(cmdWrapper);
        if (ds.Tables.Count > 0)
        {
        DataTable dt = ds.Tables[0];
        DataRow[] dataRows = dt.Select(string.Format(" PID = {0}", -1));
        for (int i = 0; i < dataRows.Length; i++)
        {
        int id = Convert.ToInt32(dataRows[i]["ID"]);
        BusinessScopeNodeInfo menuNodeInfo = GetNode(id, dt);
        arrReturn.Add(menuNodeInfo);
        }
        }
        return arrReturn;
        }
        private BusinessScopeNodeInfo GetNode(int id, DataTable dt)
        {
        BusinessScopeInfo menuInfo = this.FindByID(id);
        BusinessScopeNodeInfo menuNodeInfo = new BusinessScopeNodeInfo(menuInfo);
        DataRow[] dChildRows = dt.Select(string.Format(" PID={0}", id));
        for (int i = 0; i < dChildRows.Length; i++)
        {
        int childId = Convert.ToInt32(dChildRows[i]["ID"]);
        BusinessScopeNodeInfo childNodeInfo = GetNode(childId, dt);
        menuNodeInfo.Children.Add(childNodeInfo);
        }
        return menuNodeInfo;
        }

        其中所用到的數據實體如下面兩個類所示,其中BusinessScopeNodeInfo 是對象 BusinessScopeInfo的進一步封裝,方便提供樹的基本信息,也就是BusinessScopeNodeInfo 是一個包含了子類數據的對象,BusinessScopeInfo僅僅是數據庫對象的映射實體。
        代碼
        代碼如下:

        /// <summary>
        /// BusinessScopeNodeInfo 的摘要說明。
        /// </summary>
        public class BusinessScopeNodeInfo : BusinessScopeInfo
        {
        private ArrayList m_Children = new ArrayList();
        /// <summary>
        /// 子菜單實體類對象集合
        /// </summary>
        public ArrayList Children
        {
        get { return m_Children; }
        set { m_Children = value; }
        }
        public BusinessScopeNodeInfo()
        {
        this.m_Children = new ArrayList();
        }
        public BusinessScopeNodeInfo(BusinessScopeInfo scopeInfo)
        {
        base.Id = scopeInfo.Id;
        base.Name = scopeInfo.Name;
        base.Seq = scopeInfo.Seq;
        }
        }

        代碼
        代碼如下:

        [Serializable]
        public class BusinessScopeInfo : BaseEntity
        {
        #region Field Members
        private decimal m_Id = 0;
        private decimal m_Pid = -1;
        private string m_Name = "";
        private string m_Seq = "";
        #endregion
        #region Property Members
        public virtual decimal Id
        {
        get
        {
        return this.m_Id;
        }
        set
        {
        this.m_Id = value;
        }
        }
        public virtual decimal Pid
        {
        get
        {
        return this.m_Pid;
        }
        set
        {
        this.m_Pid = value;
        }
        }
        public virtual string Name
        {
        get
        {
        return this.m_Name;
        }
        set
        {
        this.m_Name = value;
        }
        }
        public virtual string Seq
        {
        get
        {
        return this.m_Seq;
        }
        set
        {
        this.m_Seq = value;
        }
        }
        #endregion
        }

        其中的數據格式大致如下(本文的例子是在Oracle環境中工作的),其實SqlServer或者其他數據庫也是一樣。

        主要研究技術:代碼生成工具、Visio二次開發
        轉載請注明出處:
        撰寫人:伍華聰

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

        文檔

        Asp.net TreeView來構建用戶選擇輸入的方法 推薦

        Asp.net TreeView來構建用戶選擇輸入的方法 推薦:一般的單項數據選擇可以使用DropdownList控件來實現,但對于有多個選擇性輸入,而且輸入有層次關系的內容,最好選擇TreeView控件來實現。 本文介紹如何使用使用TreeView控件來有效獲取用戶的輸入,其中涉及到TreeView控件的級聯選擇、去掉節點HTML鏈接變
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲欧美日韩中文无线码| 亚洲一区二区女搞男| 免费精品国产自产拍在| 97视频热人人精品免费| 日本牲交大片免费观看| 亚洲av日韩av欧v在线天堂| 亚洲一区二区三区自拍公司| 成人免费网站久久久| 你是我的城池营垒免费观看完整版| 59pao成国产成视频永久免费 | 三年片在线观看免费| 2021免费日韩视频网| 亚洲色成人中文字幕网站| 国产大片免费天天看| 成人毛片18女人毛片免费96| 日韩亚洲精品福利| 日韩毛片一区视频免费| 九九精品免费视频| 亚洲美国产亚洲AV| 亚洲国产精品尤物yw在线 | 中文字幕在线免费| 亚洲一级片内射网站在线观看| 亚洲AV无码码潮喷在线观看| 亚洲AV永久无码精品一福利| 久久国产精品免费视频| 亚洲国产人成中文幕一级二级| 亚洲熟妇AV一区二区三区浪潮 | 久久九九亚洲精品| 日韩一级片免费观看| 亚洲国产精品无码专区在线观看| 国产免费不卡视频| 精品国产日韩亚洲一区91| 成人免费一区二区无码视频| 亚洲最大中文字幕| 一个人看的www免费视频在线观看| 免费A级毛片无码A| 亚洲日韩精品无码专区| 亚洲综合激情另类专区| 久久九九兔免费精品6| 亚洲AV第一页国产精品| 在线观看特色大片免费网站 |