Hello,
I have a collection that contains children and those children can contain children etc. When i press on the rootnode to expand it works, when i click on the first childnode to expand it works etc. But when i press on the second childnode for example and i debug through the code (ColumnSetGenerated event) i see that the columnset doesnt contain any columns and it will display the children as Node4 for example instead of the columns.
Can someone help me with this problem?
Thank you.
Hi Kevin,
The first thing I recommend is that you make sure you have the latest service release. This sounds like a bug that was fixed a while ago.
How to get the latest service release - Infragistics Community
If that doesn't help, then I would try binding the same data to the WinGrid and see if it displays the data correctly. If the grid doesn't show the data, either, then that might be an indication that something isn't set up correct on your data source.
Heej Mike,
Thanks for your reply.Uhm i am almost sure that we use the version 9.2. Monday i will try to use an wingrid, will let you know the results.
Thanks.
Hello Mike,
I cant get it to work with a WinGrid.According to my collegea's, we are using infragistics 9.2. In a previous project i have used the wintree also and their it works correctly, but their the children are collected in the very beginning. Now i am using the beforeexpand event to fill the children belonging to a parent.
It seems unlikely that my datasource is being set wrong, because why does it works with the first node and then it will work for the rest? Just binding a bindinglist to the tree's datasource.
Can it be that this is still a bug?
KevinKlein said:Now i am using the beforeexpand event to fill the children belonging to a parent.
This is probably the problem. Depending on the DataSource you are using, the BindingManager in DotNet may need to have a row of data in order to determine the data structure at a particular level. If there are no rows, it can't get the columns and so the tree and the grid cannot, either.
What it will do in a case like this is try to create a new row and then cancel it. So if you are creating your own custom data source, you have to implement either IEditableObject or ICancelAddNew in order to allow the BindingManager to create a row and then cancel it.
Another option is, of course, to simply create the ColumnSets yourself.
I am not really sure i can follow you.You say if the bindingmanager cannot find any (children) rows, it cannot get the columns.But there are children rows, but they are only show as node0, node1 etc.Lets say i have a 2 rootnodes, the first one is named 'Host1' and the second one is named 'Host2'.When i expand the first rootnode everything works fine, and when i then expand the second rootnode is also works OK (It will show his children, with the correct columns). But lets say i first opened 'Host2' (and i know it will have 2 children), the childnodes will look like this: Node0 and Node1.Just to test it, i created a class 'CustomClass' which overrides from BindingList and implements IEditableObject and ICancelAddNew. But do i need to write some extra code in those implemented methods? I just said for example in the EndEdit method, this.EndEdit();
Thanks Mike for the help, appreciate it:)
KevinKlein said:You say if the bindingmanager cannot find any (children) rows, it cannot get the columns.But there are children rows, but they are only show as node0, node1 etc.
Maybe I misunderstood, but you said in your post above that there are not rows at the time you are binding the tree and that the nodes get added later in the BeforeExpand event. This is too late. The data structure is determined as soon as the parent node is loaded and displayed on the screen, so by the time the user tries to expand that node, the ColumnSet will already have been created - or failed to be created in this case.
By the way... there's a static method on UltraTreeColumnSet where you can pass in a DataSource and a DataMember and it will return an auto-generated ColumnSet to you. So you could check the ColunnSets collection on your tree and see if one exists for the band and if not, create it.
Hey Mike,
I am not sure how that static method can help me, but maybe i have made a little bit progress.In the ColumnSetGenerated event i now check if the columnset contains columns, if not i loop through a list that contains the columns that need to be shown (The dynamic properties) and then for the hardcoded properties i check the type of the selectednode and then i retrieve the PropertyInfo.Those columns i load into the e.columnset.columns.add.But now my children properties are also being shown as column, how can i prevent this?
Mike Saltzman said:Maybe I misunderstood, but you said in your post above that there are not rows at the time you are binding the tree and that the nodes get added later in the BeforeExpand event. This is too late. The data structure is determined as soon as the parent node is loaded and displayed on the screen, so by the time the user tries to expand that node, the ColumnSet will already have been created - or failed to be created in this case.
But this still doesnt explain why the first node will work correcly, i suppose.
First thing I would do is... don't use an IList. The BindingManager in DotNet does not work well with IList. Try using a List<T> or better yet, a BindingList<T>.
Any help appriciated.
HI Mike ,
I am also facing the same issue.I am using the IList collection to bind the TreeNode.
The problem doesnt occur with First Immediate child of the Node , but other child nodes.
Also, We have child nodes added to the first immediate child , we dont face problem in other child nodes(of base node).
I think its tightly binding the base node with immediate child node.
Can you please help......
Thanks,Ashish.
I want to thank you for your time to help me out.I didnt got it to work with databinding, i am now building the tree node for node. And this works great to. (Little bit difficult creating the columnsets, but it works now)
Thanks
That static method would generate the ColumnSet for you so you would not have to do it yourself.
KevinKlein said:It works for that child, but when i try to expand the childs child, it doesnt do anything.
Then clearly something is wrong with the ColumnSet for the child's child level of the data. When you are binding, the ColumnSet's Key has to match up to the name of the band. Or, you can assign the ColumnSet explicitly using properties on the various Override objects.