Workaround: private void radTreeView1_NodeFormatting(object sender, TreeNodeFormattingEventArgs e) { e.NodeElement.ContentElement.TextAlignment = ContentAlignment.MiddleCenter; }
To reproduce: radTreeView1.Filter = "new"; var node = new RadTreeNode( "test" ); radTreeView1.Nodes.Add( node ); //here the node is not in the Nodes collection if ( radTreeView1.Nodes.Contains( node ) == false ) { radTreeView1.Nodes.Add( new RadTreeNode( "test" ) ); } Workaround: remove the filter, perform the desired check and restore the filter
Say you have a button which clears the old nodes and adds a number of new child nodes to the currently selected node. If the selected node is collapsed, the newly added nodes are not visible but the scrollbar updates as if they were. Workaround the issue by using the BeginUpdate/EndUpdate methods of RadTreeView when updating the nodes: radTreeView1.BeginUpdate(); node.Nodes.Clear(); foreach (RadTreeNode treeNode in nodes) { node.Nodes.Add((RadTreeNode)treeNode.Clone()); } radTreeView1.EndUpdate();
To reproduce: Use the following code on an empty RadTreeView: this.TreeView.AddNodeByPath("General\\Billing\\February\\Report.txt"); You will see that the Report.txt node will be added to the Root node Workaround: Use the following method: private RadTreeNodeCollection AddNode(string path) { if (path == String.Empty) return this.TreeView.Nodes; string node = Path.GetFileName(path); RadTreeNodeCollection parent = AddNode(Path.GetDirectoryName(path)); if (parent.Contains(node)) return parent[node].Nodes; else return parent.Add(node).Nodes; }
Copy and paste in RadTreeView does not copies all properties of RadTreeNode.
RadTreeView. Add node templates as ASP.NET AJAX - http://www.telerik.com/help/aspnet-ajax/treeview-templates-structure.html
Scenario: We have an object P which has two lists of child objects of types C1 and C2. If we create a list of P and we try to bind the tree to this list and display the two lists as child nodes, we will not succeed.
To reproduce: radTreeView1.Filter = "new"; radTreeView1.Nodes.Add("new Node"); for (int i = 0; i < 1000; i++) { radTreeView1.Nodes.Add(new RadTreeNode("test")); } Workaround: radTreeView1.TreeViewElement.Update(RadTreeViewElement.UpdateActions.Reset);
The child nodes are aligned to the root nodes when ShowRootLines property is set to false.
To reproduce: Add a RadTreeView and a Timer(from the Windows.Forms namespace). Set the timer's interval to some short duration and add nodes to tree on its tick event. Scroll the thumb while the timer is ticking. At some point you will notice that the scrollbar's maximum value is not correct. Workaround: Do not add nodes while scrolling: List<string> cachedValues = new List<string>(); System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer() { Interval = 100 }; void radTreeView1_MouseCaptureChanged(object sender, EventArgs e) { timer.Start(); } void timer_Tick(object sender, EventArgs e) { timer.Stop(); if (this.cachedValues.Count > 0 && !radTreeView1.TreeViewElement.Scroller.Scrollbar.ThumbElement.Capture) { foreach (string value in this.cachedValues) { root.Nodes.Add(value); } cachedValues.Clear(); } } private void timerUpdateNodes_Tick(object sender, EventArgs e) { for (int i = 0; i < 10; ++i) { if (random.NextDouble() < .2) { if (radTreeView1.TreeViewElement.Scroller.Scrollbar.ThumbElement.Capture) { cachedValues.Add("Node"); } else { root.Nodes.Add("Node"); } } } }
Sort the selected nodes according to their position in the tree
Workaround: raise a flag before the delete operation and cancel the SelectedNodeChanging event
Please refer to the attached gif file and sample project. The screen tip position is not the same each time. Hence, the issue may not be reproducible every time. Workaround: use the TooltiptextNeeded event.
Workaround: private void radButton1_Click(object sender, EventArgs e) { var allNodes = radTreeView1.TreeViewElement.GetNodes().ToList(); int row = 0; Workbook workbook = new Workbook(); Worksheet newWorksheet = workbook.Worksheets.Add(); foreach (var item in allNodes) { CellSelection cell = newWorksheet.Cells[row, item.Level]; cell.SetValue(item.Text); cell = newWorksheet.Cells[row++, 2]; cell.SetValue(item.Checked); } var formatProvider = new XlsxFormatProvider(); var bytes = formatProvider.Export(workbook); File.WriteAllBytes(@"D:\Test.xlsx", bytes); }
To reproduce: add a RadTreeView and a RadBreadCrumb and apply the MaterialTeal theme. Refer to the attached screenshot illustrating the wrong font of the selected item. Workaround: public partial class RadForm1 : Telerik.WinControls.UI.RadForm { public RadForm1() { InitializeComponent(); ThemeResolutionService.ApplicationThemeName = "MaterialTeal"; this.radTreeView1.NodeFormatting += radTreeView1_NodeFormatting; this.radTreeView1.SelectedNodeChanged += radTreeView1_SelectedNodeChanged; } private void UpdateFont() { foreach (RadSplitButtonElement item in this.radBreadCrumb1.BreadCrumbElement.Items) { foreach (RadMenuItem menuItem in item.Items) { if (this.radTreeView1.SelectedNode != null && menuItem.Text == this.radTreeView1.SelectedNode.Text) { menuItem.Font = new Font(f.FontFamily,f.Size, FontStyle.Bold); } } } } private void radTreeView1_SelectedNodeChanged(object sender, Telerik.WinControls.UI.RadTreeViewEventArgs e) { UpdateFont(); } Font f = null; private void radTreeView1_NodeFormatting(object sender, Telerik.WinControls.UI.TreeNodeFormattingEventArgs e) { f = e.NodeElement.ContentElement.Font; }
Steps to reproduce the issue:
1. Run the example app.
2. Click undo (the last item is removed).
3. Click redo (the last item should be added to the Treeview, it does not)
If I run the application and click undo twice and then redo twice, the things work. The Treeview is not updated if I add and remove the same element instance to the binding list.
Workaround: rebind the treeview after redo or create a new instance of the Element class with the same name and id.
Use the following code snippet and compare the filtering performance when using bound and unbound mode:
public RadForm1()
{
InitializeComponent();
this.radTextBox1.TextChanged += this.RadTextBox1_TextChanged;
this.radTextBox2.TextChanged += this.RadTextBox2_TextChanged;
List<Data> list = new List<Data>();
this.radTreeView1.BeginUpdate();
for (int i = 0; i < 100000; i++)
{
list.Add(new Data()
{
Id = i,
Name = "MyData_"+i,
ParentId = -1
}) ;
this.radTreeView1.Nodes.Add("MyData_"+i);
}
this.radTreeView1.EndUpdate();
this.radTreeView2.DisplayMember = "Name";
this.radTreeView2.ParentMember = "ParentId";
this.radTreeView2.DataSource = list;
}
private void RadTextBox2_TextChanged(object sender, EventArgs e)
{
this.radTreeView2.Filter = this.radTextBox2.Text;
}
private void RadTextBox1_TextChanged(object sender, EventArgs e)
{
this.radTreeView1.Filter = this.radTextBox1.Text;
}
}
public class Data
{
public int Id { get; set; }
public string Name { get; set; }
public int ParentId { get; set; }
}
Expected behavior: the performance in bound and unbound mode should be quite similar
Actual behavior: the performance is much slower in bound mode
In Load-On-Demand scenario when visibility of ExpanderElement is changed in NodeFormatting - drawing of lines is invalid