Заполнение TreeView из базы данных

У меня есть таблица базы данных (называемая темами), которая включает в себя следующие поля:

  1. TopicID
  2. имя
  3. ParentID

и, используя их, я хочу заполнить TreeView в c #. Как я могу это сделать ?

Заранее спасибо…

Вероятно, это будет что-то вроде этого. Дайте более подробную информацию о том, что именно вы хотите сделать, если вам нужно больше.

//In Page load foreach (DataRow row in topics.Rows) { TreeNode node = new TreeNode(dr["name"], dr["topicId"]) node.PopulateOnDemand = true; TreeView1.Nodes.Add(node); } /// protected void PopulateNode(Object sender, TreeNodeEventArgs e) { string topicId = e.Node.Value; //select from topic where parentId = topicId. foreach (DataRow row in topics.Rows) { TreeNode node = new TreeNode(dr["name"], dr["topicId"]) node.PopulateOnDemand = true; e.Node.ChildNodes.Add(node); } } 

Не совсем.

Деревья обычно обрабатываются лучше всего, не загружая все, что вы можете сразу. Поэтому вам нужно получить корневой узел (или тему), у которого нет родительских идентификаторов. Затем добавьте их в корневой узел деревьев, а затем для каждого добавляемого вами узла вам нужно будет получить своих детей.

 foreach (DataRow row in topicsWithOutParents.Rows) { TreeNode node = New TreeNode(... whatever); DataSet childNodes = GetRowsWhereParentIDEquals(row["topicId"]); foreach (DataRow child in childNodes.Rows) { Treenode childNode = new TreeNode(..Whatever); node.Nodes.add(childNode); } Tree.Nodes.Add(node); } 

этот код отлично работает для меня, проверьте его, я думаю, это поможет вам 🙂

;

 protected void Page_Load(object sender, EventArgs e) { DataSet ds = RunQuery("Select topicid,name from Topics where Parent_ID IS NULL"); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { TreeNode root = new TreeNode(ds.Tables[0].Rows[i][1].ToString(),ds.Tables[0].Rows[i][0].ToString()); root.SelectAction = TreeNodeSelectAction.Expand; CreateNode(root); TreeView1.Nodes.Add(root); } } void CreateNode(TreeNode node) { DataSet ds = RunQuery("Select topicid, name from Category where Parent_ID =" + node.Value); if (ds.Tables[0].Rows.Count == 0) { return; } for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { TreeNode tnode = new TreeNode(ds.Tables[0].Rows[i][1].ToString(), ds.Tables[0].Rows[i][0].ToString()); tnode.SelectAction = TreeNodeSelectAction.Expand; node.ChildNodes.Add(tnode); CreateNode(tnode); } } DataSet RunQuery(String Query) { DataSet ds = new DataSet(); String connStr = "???";//write your connection string here; using (SqlConnection conn = new SqlConnection(connStr)) { SqlCommand objCommand = new SqlCommand(Query, conn); SqlDataAdapter da = new SqlDataAdapter(objCommand); da.Fill(ds); da.Dispose(); } return ds; } 
 protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) PopulateRootLevel(); } private void PopulateRootLevel() { SqlConnection objConn = new SqlConnection(connStr); SqlCommand objCommand = new SqlCommand(@"select FoodCategoryID,FoodCategoryName,(select count(*) FROM FoodCategories WHERE ParentID=c.FoodCategoryID) childnodecount FROM FoodCategories c where ParentID IS NULL", objConn); SqlDataAdapter da = new SqlDataAdapter(objCommand); DataTable dt = new DataTable(); da.Fill(dt); PopulateNodes(dt, TreeView2.Nodes); } private void PopulateSubLevel(int parentid, TreeNode parentNode) { SqlConnection objConn = new SqlConnection(connStr); SqlCommand objCommand = new SqlCommand(@"select FoodCategoryID,FoodCategoryName,(select count(*) FROM FoodCategories WHERE ParentID=sc.FoodCategoryID) childnodecount FROM FoodCategories sc where [email protected]", objConn); objCommand.Parameters.Add("@parentID", SqlDbType.Int).Value = parentid; SqlDataAdapter da = new SqlDataAdapter(objCommand); DataTable dt = new DataTable(); da.Fill(dt); PopulateNodes(dt, parentNode.ChildNodes); } protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e) { PopulateSubLevel(Int32.Parse(e.Node.Value), e.Node); } private void PopulateNodes(DataTable dt, TreeNodeCollection nodes) { foreach (DataRow dr in dt.Rows) { TreeNode tn = new TreeNode(); tn.Text = dr["FoodCategoryName"].ToString(); tn.Value = dr["FoodCategoryID"].ToString(); nodes.Add(tn); //If node has child nodes, then enable on-demand populating tn.PopulateOnDemand = ((int)(dr["childnodecount"]) > 0); } } 

Если нет больших сумм данных, тогда нехорошо подключать базу данных, извлекать данные и добавлять в узел дерева снова и снова для дочерних / вспомогательных узлов. Это можно сделать в одиночной попытке. См. Следующий пример:
http://urenjoy.blogspot.com/2009/08/display-hierarchical-data-with-treeview.html

Этот код отлично подходит для меня. Думал, что это может быть полезно для тех, кто хочет отображать иерархические данные в treeview. Далеко, я думаю, это самый простой. Пожалуйста, проверьте это и подтвердите, если это поможет вам.

Ссылка: https://techbrij.com/display-hierarchical-data-with-treeview-in-asp-net

Код C #:

  //dtTree should be accessible in both page load and AddNodes() //DocsMenu is the treeview Id DataTable dtTree = new DataTable(); //declare your connection string protected void Page_Load(object sender, EventArgs e) { //DataTable dtTree = new DataTable(); using (con) { con.Open(); string sQuery = "Select topicId,parentid,name from tbl_topicMaster"; SqlCommand cmd = new SqlCommand(sQuery, con); cmd.CommandType = CommandType.Text; SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(dtTree); da.Dispose(); con.Close(); } AddNodes(-1, DocsMenu.Nodes); } void AddNodes(int id, TreeNodeCollection tn) { foreach (DataRow dr in dtTree.Select("parentid= " + id)) { TreeNode sub = new TreeNode(dr["name"].ToString(), dr["topicId"].ToString()); tn.Add(sub); AddNodes(Convert.ToInt32(sub.Value), sub.ChildNodes); } } 

Код aspx:

       
  • Как сделать одиночный Связанный список на странице MVC View
  • Как получить TreeViewItem из элемента HierarchicalDataTemplate?
  • WPF TreeView: как стилизовать выбранные элементы с закругленными углами, как в Explorer
  • заполнять дерево из списка путей файла в wpf
  • Связывание данных с SelectedItem в WPF Treeview
  • Выберите узел TreeView правой кнопкой мыши перед отображением ContextMenu
  • Давайте будем гением компьютера.