Вот лучшее объяснение того, что мне нужно, я думаю, что это сделано по большей части, но я просто не могу понять это в 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
.