TreeView控件用于显示分层信息。
我有一棵代表Excel函数的树,其中节点包含名称:函数名称(例如SUM);类型:函数类型(函数或数字);参数:函数_参数。整个专业...
我正在尝试使用 c# 和 asp.net 动态创建树视图。 我使用 populate ondemand 属性创建了一个延迟加载树视图。 > 我正在尝试使用 c# 和 asp.net 动态创建树视图。 我使用 populate ondemand 属性创建了一个延迟加载树视图。 > <asp:TreeView ID="treeView1" runat="server" > OnTreeNodePopulate="treeview1_TreeNodePopulate"></asp:TreeView> 在代码后面,我已经加载了数据,但最初我填充了父节点。我想要实现的是,当我单击父节点时,我会进行回发,然后填充其子节点,然后再次填充其子节点,等等。我有数千个数据,因此由于性能原因,我不希望填充所有数据。这就是为什么我只想根据所选节点填充节点子节点的原因。请参阅下面的示例: >Peter - - >user1 - - >user2 - - >user3 - - >userPassword - - >userId >john >david >Jack - - >user1 - - >user2 - - >userpassword - - >userId - - >Permissions >Laura - - > admin - - > permissions -- > user1 -- > user2 - - >userpassword - - >userId - - >Permissions >... >... >... 如您所见,可以有多个父节点和多个层。这些将根据我传递给数据库的内容动态填充。每次我单击节点时,它都会展开节点并使用回发填充其子级,然后当您再次单击其子级时,它将执行回发并再次填充其子级等。所以我需要有关如何创建动态树视图的帮助。 c#: private void LoadTreeview() { //Load data // Get data from DB. //loop through the list and build its parent nodes. foreach (var dxm in list) { TreeNode tnParent = CheckNodeExist(dxm.Node); //I check to see if exists. if (tnParent== null) { TreeNode tn = new TreeNode(); tn.Text = dxm.Node; tn.Value = dxm.Id.ToString(); tn.SelectAction = TreeNodeSelectAction.None; tn.Collapse(); treeView1.Nodes.Add(tn); tn.PopulateOnDemand = true; //lazy load tnParent= tn; } } 上面的方法在页面加载时调用。 在 TreeNodePopulateEvent 上:(单击节点时) protected void treeview1_TreeNodePopulate(object sender, TreeNodeEventArgs e) { ICollection<ITEMS> list = new Collection<ITEMS>(); list = GetData(e.Node.Text); //pass in the node you have selected this will go and check in DB if the node does have any child nodes. If so will return with child nodes. foreach (var dxm in list) { TreeNode tnChild = CheckNodeExist(dxm.Node); if (tnChild == null) { TreeNode tn = new TreeNode(); tn.Text = dxm.Node; tn.Value = dxm.Id.ToString(); tn.SelectAction = TreeNodeSelectAction.None; tn.Collapse(); tn.PopulateOnDemand = true; tnChild = tn; tnChild.ChildNodes.Add(tnChild); } } } 我相信您正在寻找 SelectedNodeChanged 事件。您应该能够在此事件中加载您的子节点。基本上,每次您通过单击选择一个节点时都会触发此事件。 你的aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div id="div1" runat="server"> </div> <asp:TreeView ID="TreeView1" runat="server" onselectednodechanged="TreeView1_SelectedNodeChanged"> </asp:TreeView> </form> </body> </html> 你的代码隐藏 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { TreeView1.Nodes.Add(new TreeNode("Node1")); TreeView1.Nodes[0].ChildNodes.Add(new TreeNode("ChildNode")); } } protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e) { Response.Write(TreeView1.SelectedNode.Text); } } 也许这个例子会对你有所帮助,我正在使用 baisc 递归在 .NET core mvc 中创建类似用户树的结构。 这里我使用sql server来存储用户数据,每个节点/用户都由用户名标识。每个节点都是个体用户。登录用户将显示在顶部,子用户将显示在底部,形成一个具有 leftMember/leftNode 和 rightMember/rightNode 的树状结构。 模型类: public class UserModel { [Key] public int userId { get; set; } [Required] public string firstName { get; set; } [Required] public string lastName { get; set; } [Required] public string userName { get; set; } [Required] public string password { get; set; } public string leftMember { get; set; } = ""; public string rightMember { get; set; } = ""; } 用户登录验证: [HttpPost] public async Task<IActionResult> Auth(string username, string password) { var findingFeni = context.User.Where(n => n.userName == username && n.password == password).FirstOrDefault(); if(findingFeni == null) { return Content("user or password is incorrect"); } var claims = new List<Claim> { new Claim(ClaimTypes.Name, username) }; var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); var authProperties = new AuthenticationProperties { }; await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authProperties); return RedirectToAction("Index"); } 添加左右成员/节点: public async Task<IActionResult> addMyLeftMember(int userId) { TempData["LeftMemberUserId"] = userId; return RedirectToAction("RegisterLeftMember"); } public async Task<IActionResult> addMyRightMember(int userId) { TempData["RightMemberUserId"] = userId; return RedirectToAction("RegisterRightMember"); } public async Task<IActionResult> AddMemberLeft(UserModel userModel) { UserModel usr = context.User.Where(n => n.userName == userModel.userName).FirstOrDefault(); if(usr != null) { return Content("user already exist"); } int userID = int.Parse(TempData["LeftMemberUserId"].ToString()); var findingDaddy = context.User.Where(n => n.userId == userID).FirstOrDefault(); findingDaddy.leftMember = userModel.userName; context.User.Add(userModel); await context.SaveChangesAsync(); return RedirectToAction("Index"); } public async Task<IActionResult> AddMemberRight(UserModel userModel) { UserModel usr = context.User.Where(n => n.userName == userModel.userName).FirstOrDefault(); if (usr != null) { return Content("user already exist"); } int userID = int.Parse(TempData["RightMemberUserId"].ToString()); var findingDaddy = context.User.Where(n => n.userId == userID).FirstOrDefault(); findingDaddy.rightMember = userModel.userName; context.User.Add(userModel); await context.SaveChangesAsync(); return RedirectToAction("Index"); } 在索引中获取用户数据我正在获取所有用户数据,但您只能获取将完成工作的登录用户数据。 public IActionResult Index() { List<UserModel> users = context.User.ToList(); string name = User.Identity.Name; if(name == null || name.Equals("")) { name = "admin"; } List<UserModel> newUserList = users.Where(user => String.Compare(user.userName, User.Identity.Name) >= 0).ToList(); return View(newUserList); } 索引页: @inject TASK_1._1.Context.ApplicationDbContext context @model List<UserModel> @{ ViewData["Title"] = "Home Page"; } <div class="text-center"> @if (Model != null && Model.Count() > 0) { <table border="1" class="text-center"> @foreach (var user in Model) { @Html.Partial("_UserNodeView", user) break; } </table> } </div> 查看: @inject TASK_1._1.Context.ApplicationDbContext context @model UserModel @* *@ @{ } <table border="1" class="text-center"> <a> @Model.userName </a> <tr> <td> @if (Model.leftMember.Equals("")) { <div> <form asp-controller="Home" asp-action="AddMyLeftMember" method="post"> <button class="btn btn-primary" type="submit" asp-action="AddMyLeftMember" asp-route-userId="@Model.userId"> Left </button> </form> </div> } else { var u = context.User.Where(n => n.userName == Model.leftMember).FirstOrDefault(); @Html.Partial("_UserNodeView", u) } </td> <td> @if (Model.rightMember.Equals("")) { <div> <form asp-controller="Home" asp-action="AddMyRightMember" method="post"> <button class="btn btn-primary" type="submit" asp-action="AddMyRightMember" asp-route-userId="@Model.userId"> Right </button> </form> </div> } else { var u = context.User.Where(n => n.userName == Model.rightMember).FirstOrDefault(); @Html.Partial("_UserNodeView", u) } </td> </tr> </table>
如何在初始渲染时自动扩展 d3-org-chart 中的特定级别?
我正在使用 d3-org-chart 库创建组织结构图,我遇到了一个问题,我想自动扩展根级别和接下来的两个级别(级别 0、1、...
我想获取一个节点中选择的Childnodes的数量,包括子目录
我有递归程序来添加节点t树视图,但我想采用自下而上的方法来做到这一点。 到目前为止我已经这样做了,但它不起作用 私有无效 TreeviewCountCheckedNodes(
在 C# 中,有不同的方法来获取父节点的 TreeNodes 计数: int numberOfNodes = node.Nodes.OfType().Count(); int numberOfNodes = node.Nodes.Count; 我...
Mui v5 - TreeView - 在父级折叠时,折叠所有后代
当我折叠 TreeItem 时,我希望它的所有后代 TreeItem(它的子项、它们的子项等)也展开以折叠。我怎样才能做到这一点?视觉流程: 1.初始状态: 树项目...
我正在尝试在 tkinter 树视图中实现多行列。在下面的示例中,我希望“描述”列中的文本跨多行换行。如果用户拖动列
如何创建一个按钮或选项,允许用户根据列中的值过滤树视图(Python)?
我创建了一个 GUI,其中根据下拉菜单中的货币选择显示交易量数据。显示的数据框如下例所示。数据框使用
我有一个如下所示的列表: 公共类 CategoryViewModel { 公共 int Id { 得到;放; } 公共字符串?名称{获取;放; } 公共整数?父类别Id { 获取;放; } } 我是
如何用Delphi将TreeView的节点保存到SQLite中? 我尝试了Selected和Insert方法,但没有成功。 我想获取一个级别节点并获取一个文本节点并插入到 TreeView 中...
如何在我自己的主题中设置 MUI TreeItem 组件的样式?
我想为 MUI TreeItem 组件分配颜色。我找到了这个线程,但我想在我自己的主题中使用主题样式覆盖来做到这一点。但我不能,因为 TreeItem 不在标准组件列表中......
从 QTreeView 或 QTreeWidget 制作树文件夹
从 Rest API 读取文件夹树,然后将它们显示给用户 调用 API 后的 json 响应示例: [ {"名称":"/folder1/file1.txt";"大小":"1KB"}, {"名称":"/folder1/file2.txt";"大小":"1KB"}, {“名称”:“/
C# Winforms:从对象树到 TreeView 的递归转换会重复条目
我正在尝试从 C# 中的类树构建一个 winforms TreeView,能够通过从类结构中搜索其标签来从 TreeView 中选择一个项目。 我一直在努力实现...
QStandardItem 对象没有属性 findItems
您好,我正在尝试在一个树视图中组织多个路径,但此代码不起作用 我收到如下错误: AttributeError:“QStandardItem”对象没有属性“findItems” 就像
我在Matlab中构建了一个UI,显示一棵树。我使用了新的 UI 组件,想要保存和恢复展开/折叠节点的状态。不幸的是我找不到方法来确定...
我正在尝试将项目从 ItemList 拖到我的 TreeList 中。我编写了listView1_MouseDown、listView1_MouseMove、treeView1_MouseMove 和treeView1_MouseUp 函数。当我在 treeVi 中移动鼠标时...
Python Tkinter TreeviewSelect 事件被调用两次(应该只调用一次)
我在使用下面的 Tkinter Treeview 代码时遇到问题。该代码生成一个组合框和一个树视图。 每次,当我在 Combobox 中选择一个值时,它会自动更新
我有以下 JSON 结构 { “测试1.1”:{ “测试2.2”:{}, “测试2.3”:{}, “测试2.4”:{ “测试3.1”:{}, “测试...
我正在使用引导树视图,它大部分工作得很好,但是当我从菜单链接加载新页面时,我希望所选子节点的所有父节点展开,有谁知道如何...
`我正在为大学开发一个项目,我需要使用 ADT 树做一个个人文件系统。 目前我可以打开该文件夹,并且该文件夹的所有元素都添加到树中并显示...