كيفية ربط asp.net ضوابط استخدام الذاتي والانضمام إلى بنود جداول "هرميا الهيكل" ؟

StackOverflow https://stackoverflow.com/questions/703613

سؤال

علي الجداول التالية:
1-فئات:
-معرف_الفئة
-CategoryName
-ParentID

2-البنود:
-ItemId
-ItemName
-معرف_الفئة

فئات يمكن أن يكون في هرميا مع العديد من الأطفال الفئات داخل بعضها البعض.
و أي مشاركة الطفل فئة يمكن أن يكون من العناصر الأخيرة فقط فئة الأطفال سوف تظهر البنود في إطار ذلك.
رأي سوف يكون مثل treeview و عند النقر على عنصر أنها سوف تذهب إلى صفحة جديدة.

كتبت مثل هذا:

<asp:Repeater runat="server" ID="rptCategories" OnItemDataBound="rptCategories_ItemDataBound" >
    <ItemTemplate>
        <div id="type_<%# Eval("Type") %>">
            <p >
                <a id="<%# Eval("CategoryID") %>" class="Categories">
                    <%# Eval("CategoryName") %></a>
            </p>
            <div id="ProjectsDiv_<%# Eval("CategoryID") %>" class="Projects">

                <asp:Repeater ID="rptProjects" runat="server">
                    <ItemTemplate>
                        <a id="<%# Eval("ProjectID") %>" class="ProjectLink">
                        <%# GetProject(Eval("ProjectID"))%>

                        </a>
                    </ItemTemplate>
                </asp:Repeater>
            </div>
        </div>
    </ItemTemplate>
</asp:Repeater>


ولكن هذا يمثل مستوى الهيكل ،
سؤالي هو كيف يمكن أن تجعل مثل شجرة الرأي ؟

هل كانت مفيدة؟

المحلول

وهذا هو الذهاب الى أن يكون معقدا مع مكرر إذا كنت لا تعرف مدى عمق يذهب التسلسل الهرمي. لماذا لا مجرد استخدام تريفيف ASP.NET؟

<اقتباس فقرة>   

http://msdn.microsoft كوم / EN-US / مكتبة / system.web.ui.webcontrols.treeview.aspx

ويمكنك استخدام اياكس asp.net وupdatepanel لتحقيق التأثير الذي تريد دون كتابة أي جافا سكريبت نفسك.

نصائح أخرى

للقيام بذلك تحتاج إلى فئتين واحدة شجرة مثل التحكم الأخرى الذي يغذي البيانات إلى التحكم في التسلسل الهرمي.

  • التحكم يمكنك فقط استخدام شيء مثل TreeView, أو يمكنك الكتابة الخاصة بك عن طريق وراثة من HierarchalDataBoundControl.

  • مصدر البيانات ، حيث لديك محددة جدا و تنسيق مخصص من البيانات الخاصة بك, تحتاج إلى كتابة الدرجة التي تنفذ IHierarchalDataSource.هذا الدرس سوف تصبح مصدر البيانات الخاص بك والتحكم عند استدعاء DataBind ، فإنه سيتم تغذية التحكم البيانات في الهرمي الطريقة.

هنا هو البرنامج التعليمي على كيفية بناء HierarchalDataBoundControl من الصفر.

وثمة خيار آخر هو استخدام العودية و تكون سريعة وقذرة عن ذلك.لقد أجبت على ذات السؤال على هذا هنا.

وإذا (! IsPostBack)             {                 تعبئة (TreeView1.Nodes)؛

        }
    }

  protected  void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
    {
        TreeNode node = TreeView1.SelectedNode;
        string nodeId = node.Value;
        string nodeName = node.Text;

    }
    private void Populate(TreeNodeCollection nodes)
    {
        TreeNode parentNode = null;
        foreach (Category1 category in GetProductCategories())
        {
            parentNode = new TreeNode(category.Name, category.Id.ToString());
            if (category.Subcategories != null)
            {
                SubNodes(category, parentNode);
            }
            parentNode.Collapse();
            TreeView1.Nodes.Add(parentNode);
        }
    }
    private void SubNodes(Category1 category, TreeNode childNode)
    {
        foreach (Category1 c1 in category.Subcategories)
        {
            TreeNode subchildnode = new TreeNode(c1.Name, c1.Id.ToString());
            childNode.ChildNodes.Add(subchildnode);
            if (c1.Subcategories != null)
            {
                SubNodes(c1, subchildnode);
            }
        }
    }
    protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
    {
    }
    #region unwanted

    // Show all checkboxes

    //TreeView1.ShowCheckBoxes = TreeNodeTypes.All;
    //protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
    //{
    //    PopulateSubLevel(Int32.Parse(e.Node.Value), e.Node);
    //}
    //private void PopulateSubLevel(int parentid, TreeNode parentnode)
    //{
    //    Populate1( parentid,parentnode.ChildNodes);
    //}
    //private void Populate1(int k1,TreeNodeCollection nodes)
    //{
    //    foreach (var j in GetProductCategories())
    //    {
    //        if (j.ParentId == k1)
    //        {
    //            foreach (var k in j.Subcategories)
    //            {

    //                TreeNode tn = new TreeNode();
    //                tn.Text = k.Name;
    //                tn.Value = k.ParentId.ToString();
    //                nodes.Add(tn);
    //                //tn.PopulateOnDemand = ((int)(k.Subcategories.Count) > 0);

    //            }
    //           // break;
    //        }

    //    }
    //}
    #endregion
    #region class
    //public List<Category1> GetProductCategories()
    //{
    //    return new List<Category1> { 
    //        new Category1{Id=1,Name="Power Tools",ParentId=0,Sequence=1,Description="Power Tools",DisplayInHeader=true, 
    //            Subcategories = new List<Category1>
    //                {new Category1{Id=100,Name="Drills",ParentId=1,Sequence=1,Description="Drills",DisplayInHeader=true},
    //                new Category1{Id=101,Name="Drill Accessories",ParentId=1,Sequence=1,Description="Drill Accessories",DisplayInHeader=true},
    //                new Category1{Id=102,Name="Saws",ParentId=0,Sequence=1,Description="Saws",DisplayInHeader=true}  
    //                }},
    //                new Category1{Id=2,Name="Cordless Tools",ParentId=1,Sequence=1,Description="Cordless Tools",DisplayInHeader=true, 
    //            Subcategories = new List<Category1>
    //                {new Category1{Id=200,Name="Batteries/Chargers",ParentId=2,Sequence=1,Description="Batteries/Chargers",DisplayInHeader=true} 

    //                }},new Category1{Id=3,Name="AirTools",ParentId=2,Sequence=1,Description="Air Tools",DisplayInHeader=true, 
    //            Subcategories = new List<Category1>
    //                {new Category1{Id=300,Name="Portable Compressors",ParentId=0,Sequence=1,Description="Portable Compressors",DisplayInHeader=true},

    //                }}
    //    };
    //}
    #endregion

    public List<Category1> GetProductCategories()
    {
        return new List<Category1> { 
            new Category1{Id=1,Name="Power Tools",ParentId=0,Sequence=1,Description="Power Tools",DisplayInHeader=true, 
                Subcategories = new List<Category1>
                    {new Category1{Id=100,Name="Drills",ParentId=1,Sequence=1,Description="Drills",DisplayInHeader=true},
                    new Category1{Id=101,Name="Drill Accessories",ParentId=1,Sequence=1,Description="Drill Accessories",DisplayInHeader=true,
                        Subcategories= new List<Category1>{new Category1{Id=1001,Name="Drill Accessories",ParentId=101,Sequence=1,Description="Drill Accessories",DisplayInHeader=true,
                        Subcategories= new List<Category1>{new Category1{Id=1001,Name="Drill Accessories",ParentId=101,Sequence=1,Description="Drill Accessories",DisplayInHeader=true}}}}},                              

                    new Category1{Id=102,Name="Saws",ParentId=0,Sequence=1,Description="Saws",DisplayInHeader=true}  
                    }},
                    new Category1{Id=2,Name="Cordless Tools",ParentId=1,Sequence=1,Description="Cordless Tools",DisplayInHeader=true, 
                Subcategories = new List<Category1>
                    {new Category1{Id=200,Name="Batteries/Chargers",ParentId=2,Sequence=1,Description="Batteries/Chargers",DisplayInHeader=true,
                    Subcategories = new List<Category1>
                    {new Category1{Id=200,Name="Batteries",ParentId=2,Sequence=1,Description="Batteries/Chargers",DisplayInHeader=true,
                    Subcategories = new List<Category1>
                    {new Category1{Id=200,Name="Batteries",ParentId=2,Sequence=1,Description="Batteries/Chargers",DisplayInHeader=true,
                    Subcategories = new List<Category1>
                    {new Category1{Id=200,Name="Batteries",ParentId=2,Sequence=1,Description="Batteries/Chargers",DisplayInHeader=true,
                    Subcategories = new List<Category1>
                    {new Category1{Id=200,Name="Batteries",ParentId=2,Sequence=1,Description="Batteries/Chargers",DisplayInHeader=true}}}}}}}}} 

                    }},new Category1{Id=3,Name="AirTools",ParentId=2,Sequence=1,Description="Air Tools",DisplayInHeader=true, 
                Subcategories = new List<Category1>
                    {new Category1{Id=300,Name="Portable Compressors",ParentId=0,Sequence=1,Description="Portable Compressors",DisplayInHeader=true},

                    }},


        };
    }
كان

وأوراكل بيان CONNECT BY التي تم تصميمها للاستعلامات الهرمية. على الأقل من SQL Server 2005 لا أعتقد كان هناك ما يعادل المباشر لذلك كان لديك لأنها وهمية مع الإجراءات المخزنة ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top