在选择特定内容时我想突出显示节点为粗体的树路径。
protected void Trv_SelectedNodeChanged(object sender, EventArgs e)
{
HighlightPath(Trv.SelectedNode);
}
private void HighlightPath(TreeNode node)
{
node.SelectAction = TreeNodeSelectAction.None;
node.Text = "<div style=font-weight:bold>" + node.Text + "</div>";
if (node.Parent != null)
HighlightPath(node.Parent);
}
但是下次如果我正在调整另一个节点,它应该将前一个节点标记为unbold,将新路径标记为粗体。请帮忙。
答案 0 :(得分:0)
您可以通过在List<TreeNode>
中删除所有突出显示的节点来解决此问题,然后在突出显示新路径之前,您可以取消列表中的项目。
// New list of currently highlighted nodes
protected List<TreeNode> highlightedNodes = new List<TreeNode>();
protected void Trv_SelectedNodeChanged(object sender, EventArgs e)
{
// Call the method to un-highligt first
UnHighlightNodes();
HighlightPath(Trv.SelectedNode);
}
private void UnHighlightNodes()
{
foreach(var node in highlightedNodes)
{
// TODO: code to un-highlight nodes
}
// Clear List of highlighted nodes
highlightedNodes.Clear();
}
private void HighlightPath(TreeNode node)
{
node.SelectAction = TreeNodeSelectAction.None;
node.Text = "<div style=font-weight:bold>" + node.Text + "</div>";
if (node.Parent != null)
HighlightPath(node.Parent);
// Store the node in the list of highlighted nodes
highlightedNodes.Add(node);
}
这可以进一步优化以防止不突出显示,然后再次突出显示。像这样:
// New list of currently highlighted nodes
protected List<TreeNode> HighlightedNodes = new List<TreeNode>();
protected void Trv_SelectedNodeChanged(object sender, EventArgs e)
{
var nodesToHighlight = FindPathToRoot(Trv.SelectedNode).ToList();
// Un-highlight nodes (except those which should stay highlighted)
UnHighlightNodes(HighlightedNodes.Except(nodesToHighlight));
// Highlight nodes (except nodes already highlighted)
HighlightNodes(nodesToHighlight.Except(HighlightedNodes));
// Save the new list of highlighted nodes;
HighlightedNodes = nodesToHighlight;
}
private static IEnumerable<TreeNode> FindPathToRoot(TreeNode node)
{
do
{
yield return node;
node = node.Parent;
} while (node != null);
}
private void UnHighlightNodes(IEnumerable<TreeNode> nodes)
{
foreach (var node in nodes)
{
// TODO: code to un-highlight nodes
}
}
private void HighlightNodes(IEnumerable<TreeNode> nodes)
{
foreach (var node in nodes)
{
node.SelectAction = TreeNodeSelectAction.None;
node.Text = "<div style=font-weight:bold>" + node.Text + "</div>";
}
}
答案 1 :(得分:0)
我认为您需要在treeview
asp.net页面中粗体选择节点及其父节点。
如果是这样,你就不需要让它变得复杂。请尝试将其置于page load
事件中,如图所示。
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
foreach (TreeNode ParentNodes in TreeView1.Nodes)
{
ParentNodes.Text = ParentNodes.Text.Replace("<b>", "").Replace("</b>", "");
foreach (TreeNode ChildNodes in ParentNodes.ChildNodes)
{
ChildNodes.Text = ChildNodes.Text.Replace("<b>", "").Replace("</b>", "");
}
}
TreeNode node = TreeView1.SelectedNode;
node.Text = Server.HtmlDecode("<b>" + node.Text + "</b>");
node.Parent.Text = Server.HtmlDecode("<b>" + node.Parent.Text + "</b>");
}
}
这里TreeView1
是我的树视图。您不需要在SelectedNodeChanged
事件中执行任何操作。