Asp.net将树视图linq填充到实体中

本文关键字:填充 实体 linq 视图 net Asp | 更新日期: 2023-09-27 18:20:05

这里有一个更好的解释来解释我需要它,我认为它已经完成了大部分,但我只是无法在ViewMode上解决它。如果有人能帮我,谢谢!

我有一个关键字列表(概述),我想编辑/插入和查看与特定关键字相关的信息或插入一个新关键字。在这个用于插入、编辑和查看的详细信息关键字页面上,我必须显示一个树视图,其中包含类别和主题,父节点是类别和儿童主题。用户可以选中这些主题中的任何一个(基于复选框的树视图),以将所选关键字与这些主题关联起来。例如,对于"科学"类别,我有主题"数学、物理、地理",如果我想要关键字"几何",我可以在树视图上查看数学在视图模式下,我只需要显示所选的主题和类别父项,但对于插入和编辑,必须显示所有主题,并且主题都被选中。

我有这个实体和导航属性以及一个数据示例:

实体选项(OptionId、ParentId、Description、虚拟导航属性KeyWordOptions)KeyWordOption(OptionId,KeywordID,虚拟导航属性Option)

 Option Entity  
        OptionId    ParentID  Description
        1           0         Informatics
        2           1         Development
        3           0         Architecture
        4           1         Systems
        5           1         Hardware
        6           3         Civil Engineering
        7           1         Software

  KeyWordOption Entity
       OptionId   KeywordID    ID KeywordDescription
        1         8            8   Visual Studio
        2         8            2   Autocad
        4         2            5   Monitor
        5         5            9   Eclipse
        2         9
        7             8
        7             2
        7             9

Result Would be for Eclipse keyword(id = 9) at EditMode:
Informatics
    Development (checked)
    System      
    Hardware
    Software (checked)
Architecture
    Civil Engineering

结果将是ViewMode:中的Eclipse关键字(id=9)

Informatics
    Development (checked)
    Software (checked)

我的代码是:

BindTreeView(OptionList,null);

 private void BindTreeView(IEnumerable<Opcion> OptionList, TreeNode parentNode)
        {
            var nodes = OptionList.Where(x => parentNode == null ? x.ParentID == 0 : x.ParentID == int.Parse(parentNode.Value));
            if (mode != FormViewMode.View)
            {
                foreach (var node in nodes)
                {
                    TreeNode newNode = new TreeNode();
                    newNode.Text = node.Description.ToString();
                    newNode.Value = node.OptionID.ToString();
                    if (parentNode == null)
                    {
                        TreeViewOptions.Nodes.Add(newNode);
                    }
                    else
                    {
                        if (node.KeyWordOptions.Where(c => c.KeywordID == _idKeyWord).Count() > 0)
                        {
                            newNode.Checked = true;
                            parentNode.Expand();
                        }
                        parentNode.ChildNodes.Add(newNode);
                    }
                    BindTreeView(OptionList, newNode);               
                }
            }
            else
            {
                foreach (var node in nodes)
                {
                    TreeNode newNode = new TreeNode();
                    newNode.Text = node.Descripcion.ToString();
                    newNode.Value = node.OpcionID.ToString();
                    if (parentNode == null && node.KeyWordOptions.Where(c => c.KeywordID == _idKeyWord).Count() > 0)
                    {
                        TreeViewOptions.Nodes.Add(newNode);
                    }
                    else
                    {
                        if (node.KeyWordOptions.Where(c => c.KeywordID == _idKeyWord).Count() > 0)
                        {
                            newNode.Checked = true;
                            parentNode.Expand();
                        }
                        parentNode.ChildNodes.Add(newNode);
                    }
                    BindTreeView(OptionList, newNode);
                }
            }

        }
    }

我不知道该怎么做才能排除与KeywordId 不匹配的Nodes

Asp.net将树视图linq填充到实体中

编辑

也许这是在你的一个循环中,那么(顺便说一句,你应该重构)?

foreach (var node in nodes.Where
            (x => x.KeyWordOptions.Any(k => k.KeywordId == _idKeyWord));