TreeView-ді рекурсивті түрде мәліметтермен толықтыру

Бағдарламалау
Қазақ руларының байланысын asp:TreeView-ге шығармақшымын.

DB-да ру аттарын құрайтын кесте құрылымы: Ru(id, name, parentId). Ең жоғарғы бұтақтар — жүздер — олардың parentId=0, қалғандары тараған бұтақтың Id-на тең болады. Бұл түсінікті болса, төменде TreeView-ды DB-дан рекурсивті түрде толықтыратын кодтың өзі, қабыл алыңыз:

public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            var rular = new RuManager().GetRular();//DB-рулар массивін қайтарады
            TreeNode child = new TreeNode();
            var roots = rular.Where(x => x.ParentId == 0).ToArray();
            for (int i = 0; i < roots.Count(); i++)
            {
                TreeView1.Nodes.Add(new TreeNode() { Text = roots[i].Name, Value = roots[i].Id.ToString(), });
                AddTreeNode(TreeView1.Nodes[i], rular);
            }
            
            TreeView1.DataBind();
            TreeView1.CollapseAll();
        }

        public void AddTreeNode(TreeNode treeNode, Ru[] rular)
        {
            TreeNode tNode = null;
            int id = Convert.ToInt32(treeNode.Value);
            var nodes = rular.Where(x => x.ParentId == id).ToArray();
            if (nodes.Count() != 0)
            {
                for (int i = 0; i < nodes.Count(); i++)
                {
                    treeNode.ChildNodes.Add(new TreeNode() {Text=nodes[i].Name, Value=nodes[i].Id.ToString() });
                    tNode = treeNode.ChildNodes[i];
                    AddTreeNode(tNode, rular);
                }
            }
            return;
        }
    }


Нәтиже:

7 пікір

avatar
жобаны толықтай архивпен салып қоюға бола ма осында? Көшіріп алып, ашып қарап көрейінші деп едім.
avatar
Бұл жобаның бір бөлігі болғандықтан, сілтеме қоя алмаймын. Жалпы, программисттер арасында исходникпен бөлісу ұятты нәрсе болып саналады ғой. Неге екенін білмеймін, бірақ, солай:)
avatar
Рулар туралы жоба ма?
avatar
иә, бір кісі тапсырыс берген болатын.
avatar
Ондайға гитхаб, бitbucket сияқты сервистерді қолданып әдеттенген жақсы
avatar
Сонда базаға рекурсивті түрде запрос жасап жатсың ба?
avatar
Жоқ, базадан массив түрінде шығарып, кейін TreeView-ге рекурсивті түрде Binding() жасалады.
Тек қана тіркелген және авторизациядан өткен қолданушылар пікір қалдыра алады.