I am trying to figure out how to bind a dataset datatable "Typed" with a self referencing relationship into the tree. I have tried many options none of witch seem to work. I sort of understand the relationship between the TargetTypeName and the underlying data. From my unerstanding its not a property or method but a type that it is trying to match in the underlying data source... I think? If so then the type for both my nodes parent and child is the same... and that did not work... This is simple to recreate... I used the employees table from northwind but any self referencing dataset datatable will do.
EmployeesTable returns a stringly typed EmployeesDataTable - Example from Northwind DB Employees table.
I get the first level but cant seem to get anything else... Plus since this releationship can go more than two deep do i need to create another nodelayout one for as many levels as i think my data will go or is one second child level enough for it to create all other levels based on the data. The ChildLayout below is not working this was just one thing i tried.. Also can you explain a little more on how the key comes into play. I read a post the described its usage in some cases to assist in finding the item... but not quite sure how this works.
<ig:XamDataTree ItemsSource="{Binding EmployeesTable}" Name="employeesXamDataTree"> <ig:XamDataTree.GlobalNodeLayouts> <ig:NodeLayout Key="ParentLayout" TargetTypeName="EmployeesRow" DisplayMemberPath="LastName"/> <ig:NodeLayout Key="ChildLayout" TargetTypeName="EmployeesRow.GetEmployeesRows" DisplayMemberPath="Title"/> </ig:XamDataTree.GlobalNodeLayouts> </ig:XamDataTree>
I moved this from the Silverlight section to WPF. My previous post was in Silverlight section by accident.
Basically just trying to figure out how the set the options in xaml to get a dataset
with a self referencing relationship to show the data in the tree with parent and children
based on the relationship.
Thanks in advance
Just tried this and it worked. Not sure why but it did. FYI - can someone explain the relationship between the Key and TargetTypeName a little better. It seems like the key can be a "property? or method?" and the TargetTypeName is a "type" If this is true my problem here i think was with a parent and child relationship of the same table/type using TargetTypeName would not work. Is my solution correct? Why would the key not work with a methods but it did when I turned it into a property?
Here is what I did
Here is code generated for typed data set of empleyees from northwind db
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()][global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]public EmployeesRow[] GetEmployeesRows() { if ((this.Table.ChildRelations["FK_Employees_Employees"] == null)) { return new EmployeesRow[0]; } else { return ((EmployeesRow[])(base.GetChildRows(this.Table.ChildRelations "FK_Employees_Employees"]))); } }
**** I created this to test with property because specifying GetEmployeesRow in Key= did not work...
public EmployeesRow[] EmployeesChildren { get { return this.GetEmployeesRows(); } }
*** This worked ... see below
Xaml Change:
<ig:XamDataTree ItemsSource="{Binding EmployeesTable}" Name="employeesXamDataTree"> <ig:XamDataTree.GlobalNodeLayouts> <ig:NodeLayout Key="ParentLayout" TargetTypeName="EmployeesRow" DisplayMemberPath="LastName"/> <ig:NodeLayout Key="EmployeesChildren" DisplayMemberPath="LastName"/> </ig:XamDataTree.GlobalNodeLayouts>
</ig:XamDataTree>
Hello ks4561,
I am just checking if my last reply was helpful for you.
If you require any further assistance please do not hesitate to ask.
Sincerely,
Yanko
Developer Support Engineer
Infragistics
www.infragistics.com/support
Yes it was some what helpful in that it better describes some items... but I am still having a bit of trouble getting what I want. I'll explane. Yes when you have a single self referent as the top of the tree your setting the key=1 and targettypename=objecttype works. But when I move to a situation like I have it does not quite work.
I have office entity with a relationship to locations
Offices --> Locations (self reference)
<ig:XamDataTree ItemsSource="{Binding Offices}" Name="locations" DisplayMemberPath="caption" > <ig:XamDataTree.GlobalNodeLayouts> <ig:NodeLayout Key="Locations" DisplayMemberPath="caption"/>
so it should look like
Cleveland
Location A
Location B
Location B.1
Location B.2
... etc
But what I get is
Now I tried two options.
Option 1 (did not work)
In windows controls I'm used to either filtering out the first level to just be the root data items or in the row or node initialize i check the level and if it is the rool level and the parent id is not null I hide the node. This has alwasy work fine for me in windows form controls of yours. So I thought hey give it a try. So i did the below. (if node is a locations node and its level = 1 (root) hide node if its not a root.
private void locations_InitializeNode(object sender, Infragistics.Controls.Menus.InitializeNodeEventArgs e) { location l = e.Node.Data as location; XamDataTree t = sender as XamDataTree; XamDataTreeNode n = e.Node; Infragistics.Controls.Menus.NodesManager m = n.Manager; Debug.Print("Nodel Level = " + m.Level.ToString() + " Name = " + n.ToString() + " Hidden = " + n.NodeLayout.Visibility.ToString()); if (l != null) { if (m.Level == 1 && l.parent_location_id != null) { m.NodeLayout.Visibility = System.Windows.Visibility.Hidden; n.NodeLayout.Visibility = System.Windows.Visibility.Hidden; //XamDataTreeNodeControl c = n.control //c.Visibility = System.Windows.Visibility.Hidden; } else Debug.Print("Not Hidden Node Index = " + n.Index.ToString()); }
For some reason this never worked. Even though the Visibility is set to Hidden it still shows. Why?
So I moved to my second option and make another entity inherited from locations called rootLocations that only got the root records and then modifed the locations entity to on get children then did the following.
<igWindows:TabItemEx Header="Other 3"> <ig:XamDataTree ItemsSource="{Binding Offices}" Name="locations" DisplayMemberPath="caption" > <ig:XamDataTree.GlobalNodeLayouts> <ig:NodeLayout Key="rootLocations" DisplayMemberPath="caption"/> <ig:NodeLayout Key="locationsChildren" DisplayMemberPath="caption" /> </ig:XamDataTree.GlobalNodeLayouts> </ig:XamDataTree> </igWindows:TabItemEx>
This gave me what I wanted. I don't really have a problem doing this it does remove a few issues that I had to deal
with in window about the nodes being hidden... but still wondering why the hide node via visibility did not work.
Did I do something wrong?
Another question. Now I add one more level to the previous example... and then I start getting "Band" like headers above the two levels... show below I don't want those headers... How do I get ride of them?
<ig:XamDataTree ItemsSource="{Binding Offices}" Name="locations" DisplayMemberPath="caption" > <ig:XamDataTree.GlobalNodeLayouts> <ig:NodeLayout Key="rootLocations" DisplayMemberPath="caption"/> <ig:NodeLayout Key="locationsChildren" DisplayMemberPath="caption" /> <ig:NodeLayout Key="containersCurrent" DisplayMemberPath="caption" /> </ig:XamDataTree.GlobalNodeLayouts> </ig:XamDataTree>
When I add in containersCurrent a relation hanging off locations it shows everything in the right place but i get Header or "bands" with the Key name showing up on two nodes ... Why? and How can I get rid of them.
Any thoughts on the previous two posts?
I am just checking your progress on the issue.
Sorry it to so long to get back on this I just needed some time to collect everything so you could re-product the dev environment. I have attached a zip file the project and sql scripts and data to recreated the db.. I have also included a SQL Backup file if that can be used. There is not much to the db. I have also attached a word document that describes my problem or desire with detail screen shots and references to the previous posts for convenience.
I tried to attach the files you have requested so that you can re-produce the problem. But there is an upload limit of 200k for the files. can you contact me via my email with an direct email I can send these fields to. Thanks.
I also have the same issue of bands displayed above. I want to create parent child relationships with the same type
I have created the following case for you : CAS-80950-S3W0FM and now you can send your isolated sample.