با سلام
من از تابع زیر برای استفاده از TreeView تا سقف 1 فرزند استفاده می کنم که یک تابع بازگشتی است :
private void PopulateTreeView(DataTable dataTable, int parentId, RadTreeNode treeNode) { foreach (DataRow row in dataTable.Rows) { var child = new RadTreeNode { Text = row["Title"].ToString(), Value = row["Id"].ToString() }; if (parentId == 0) { radTreeView1.Nodes.Add(child); var dtChild = DbTools.RunProcedure("List_Child", DbTools.ProcType.ReturnedValue, new SqlParameter("TableName", "Publication_ProfessionalBackground"), new SqlParameter("Parent_Id", child.Value)); PopulateTreeView(dtChild, int.Parse(child.Value.ToString()), child); } else { treeNode.Nodes.Add(child); } } }
سوال اینجاست که آیا تابع مشابهی برای کار با n فرزند وجود دارد ؟
مثال زیر رو ببینید
البته این برای وب هست ولی ساختار فرقی نداره
private string GenerateUL(DataRow[] menu, DataTable table, StringBuilder sb) { sb.AppendLine("<ul>"); if (menu.Length > 0) { foreach (DataRow dr in menu) { string handler = dr["Url"].ToString(); string menuText = dr["MenuName"].ToString(); string line = String.Format(@"<li><a href=""{0}"">{1}</a>", handler, menuText); sb.Append(line); string pid = dr["PID"].ToString(); DataRow[] subMenu = table.Select(String.Format("ParentId = {0}", pid)); if (subMenu.Length > 0) { var subMenuBuilder = new StringBuilder(); sb.Append(GenerateUL(subMenu, table, subMenuBuilder)); } sb.Append("</li>"); } } sb.Append("</ul>"); return sb.ToString();
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)