Your Privacy Matters: We use our own and third-party cookies to improve your experience on our website. By continuing to use the website we understand that you accept their use. Cookie Policy
205
xamdatatree hoow to show a self referencing relationship with a datatable
posted

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
Parents
No Data
Reply
  • 205
    posted

    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>
                    
Children