Asp.net заполняет linq представления дерева для сущностей

Вот лучшее объяснение того, что мне нужно, я думаю, что это сделано по большей части, но я просто не могу понять это в ViewMode. Пожалуйста, если кто-то может мне помочь, спасибо!

У меня есть список ключевых слов (обзор), и я хочу отредактировать/вставить и просмотреть информацию, относящуюся к определенному ключевому слову, или вставить новое. На этой странице ключевых слов для вставки, редактирования и просмотра я должен показать древовидное представление с категориями и темами, родительским узлом являются категории и дочерние темы. Пользователь может отметить любую из этих тем (древовидное представление на основе флажков), чтобы связать выбранное ключевое слово с этими темами. Например, для категории «Наука» у меня есть темы «Математика», «Физика», «География». Если мне нужно ключевое слово «Геометрия», я могу проверить математику в дереве. В режиме просмотра мне просто нужно показать выбранные темы и родительскую категорию, но для вставки и редактирования нужно показать все, а также темы проверяются.

У меня есть эти объекты и свойства навигации и пример данных:

Entity Option(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

Результат будет для ключевого слова Eclipse (id = 9) в ViewMode:

Informatics
    Development (checked)
    Software (checked)

Мой код:

BindTreeView(OptionList, ноль);

 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);
                }

            }


        }
    }

Я не знаю, что мне нужно сделать, чтобы исключить Nodes, которые не соответствуют KeywordId.


person user2528557    schedule 27.06.2013    source источник
comment
Добро пожаловать в StackOverflow! Можете ли вы отредактировать свой вопрос, включив в него больше информации о том, с чем именно у вас возникли проблемы, что вы пробовали и почему именно это не сработало - это поможет нам лучше понять ваш вопрос.   -  person Justin    schedule 27.06.2013


Ответы (1)


Изменить

Может быть, это в одном из ваших циклов (кстати, вам следует провести рефакторинг)?

foreach (var node in nodes.Where
            (x => x.KeyWordOptions.Any(k => k.KeywordId == _idKeyWord));
person Raphaël Althaus    schedule 27.06.2013
comment
Но в этом случае при редактировании и вставке я не могу показать категории и темы, которые не связаны с KeywordId, но, если пользователь хочет, может добавить новые темы для ключевого слова. - person user2528557; 27.06.2013
comment
@user2528557 user2528557 о, а редактирование/вставка связаны с FormViewMode.View ? Смотрите редактировать, может быть... - person Raphaël Althaus; 27.06.2013
comment
Для редактирования и Вставки показываю то же самое, все дерево с отмеченными темами, а для режима просмотра только отмеченные. НО я немного запутался с рекурсивностью. - person user2528557; 27.06.2013
comment
о, хорошо, я знаю, что ты имеешь в виду... зачем мне нужен рефакторинг? Благодарность!! - person user2528557; 27.06.2013
comment
@user2528557 user2528557 хорошо, когда вы 2 раза пишете один и тот же код (только с одним другим параметром), обычно пришло время извлечь его другим методом ... - person Raphaël Althaus; 27.06.2013
comment
Вы видели обновленный пост, я немного лучше объясняю, что происходит ... или что я должен делать, потому что вставка и редактирование в порядке, проблемы возникают с просмотром. Что касается рефакторинга, это то, что я изменил, потому что раньше было два метода, но вы также правы, я должен больше реорганизовать этот метод и взять равную часть другому методу и вызывать его, когда это необходимо, но рекурсивность усложняет мне задачу. - person user2528557; 28.06.2013