@@ -15,14 +15,14 @@ You can load different controls for each row based on the column value by using
1515 <Grid .ColumnDefinitions>
1616 <ColumnDefinition />
1717 </Grid .ColumnDefinitions>
18- <syncfusion : SfTreeGrid Name =" treeGrid"
19- AutoGenerateColumns =" False"
20- AllowEditing =" True"
21- ItemsSource =" {Binding Employees}"
22- ChildPropertyName =" ReportsTo"
23- LiveNodeUpdateMode =" AllowDataShaping"
24- ParentPropertyName =" ID"
25- SelfRelationRootValue =" -1" >
18+ <syncfusion : SfTreeGrid Name =" treeGrid"
19+ AutoGenerateColumns =" False"
20+ AllowEditing =" True"
21+ ItemsSource =" {Binding Employees}"
22+ ChildPropertyName =" ReportsTo"
23+ LiveNodeUpdateMode =" AllowDataShaping"
24+ ParentPropertyName =" ID"
25+ SelfRelationRootValue =" -1" >
2626 <interactivity : Interaction .Behaviors>
2727 <local : SfTreeGridBehavior />
2828 </interactivity : Interaction .Behaviors>
@@ -46,108 +46,107 @@ The following code explains how different templates are loaded for each row base
4646
4747public class DataTemplateSelectorExt : DataTemplateSelector
4848{
49- DataTemplate TextBoxTemplate ;
50- DataTemplate ComboBoxTemplate ;
51- DataTemplate CheckBoxTemplate ;
52- DataTemplate CurrencyTemplate ;
53- DataTemplate UpdownTemplate ;
54- DataTemplate TextBlockTemplate ;
55-
56- public DataTemplateSelectorExt ()
49+ DataTemplate TextBoxTemplate ;
50+ DataTemplate ComboBoxTemplate ;
51+ DataTemplate CheckBoxTemplate ;
52+ DataTemplate CurrencyTemplate ;
53+ DataTemplate UpdownTemplate ;
54+ DataTemplate TextBlockTemplate ;
55+
56+ public DataTemplateSelectorExt ()
57+ {
58+ TextBlockTemplate = App .Current .Resources [" TextBlockTemplate" ] as DataTemplate ;
59+ TextBoxTemplate = App .Current .Resources [" TextBoxTemplate" ] as DataTemplate ;
60+ ComboBoxTemplate = App .Current .Resources [" ComboBoxTemplate" ] as DataTemplate ;
61+ CheckBoxTemplate = App .Current .Resources [" CheckBoxTemplate" ] as DataTemplate ;
62+ CurrencyTemplate = App .Current .Resources [" CurrencyTemplate" ] as DataTemplate ;
63+ UpdownTemplate = App .Current .Resources [" UpdownTemplate" ] as DataTemplate ;
64+ }
65+
66+ public override DataTemplate SelectTemplate (object item , DependencyObject container )
67+ {
68+ if (item == null )
69+ return TextBlockTemplate ;
70+
71+ // Customize based on your scenario
72+ EmployeeInfo orderInfo = item as EmployeeInfo ;
73+ if (orderInfo == null )
74+ return TextBlockTemplate ;
75+
76+ switch (orderInfo .LastName )
5777 {
58- TextBlockTemplate = App . Current . Resources [ " TextBlockTemplate " ] as DataTemplate ;
59- TextBoxTemplate = App . Current . Resources [ " TextBoxTemplate " ] as DataTemplate ;
60- ComboBoxTemplate = App . Current . Resources [ " ComboBoxTemplate " ] as DataTemplate ;
61- CheckBoxTemplate = App . Current . Resources [ " CheckBoxTemplate " ] as DataTemplate ;
62- CurrencyTemplate = App . Current . Resources [ " CurrencyTemplate " ] as DataTemplate ;
63- UpdownTemplate = App . Current . Resources [ " UpdownTemplate " ] as DataTemplate ;
64- }
65-
66- public override DataTemplate SelectTemplate ( object item , DependencyObject container )
67- {
68- if ( item == null )
78+ case " TextColumn " :
79+ return TextBoxTemplate ;
80+ case " ComboBoxColumn " :
81+ return ComboBoxTemplate ;
82+ case " CheckBoxColumn " :
83+ return CheckBoxTemplate ;
84+ case " CurrencyColumn " :
85+ return CurrencyTemplate ;
86+ case " GridUpDownColumn " :
87+ return UpdownTemplate ;
88+ default :
6989 return TextBlockTemplate ;
70-
71- // Here customize based on your scenario
72-
73- EmployeeInfo orderInfo = item as EmployeeInfo ;
74- if (orderInfo == null )
75- return TextBlockTemplate ;
76-
77- switch (orderInfo .LastName )
78- {
79- case " TextColumn" :
80- return TextBoxTemplate ;
81- case " ComboBoxColumn" :
82- return ComboBoxTemplate ;
83- case " CheckBoxColumn" :
84- return CheckBoxTemplate ;
85- case " CurrencyColumn" :
86- return CurrencyTemplate ;
87- case " GridUpDownColumn" :
88- return UpdownTemplate ;
89- default :
90- return TextBlockTemplate ;
91- }
9290 }
91+ }
9392}
94-
9593```
9694
9795The ** RecordPropertyChanged** event of data grid is used to update the corresponding values to [ TreeGridTemplateColumn] ( https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.TreeGrid.TreeGridTemplateColumn.html ) when the LastName column value is changed. The ** CollectionChanged** event is used to update the values of [ TreeGridTemplateColumn] ( https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.TreeGrid.TreeGridTemplateColumn.html ) based on the LastName column value when a record is added at runtime.
9896
9997``` C#
100-
10198public class SfTreeGridBehavior : Behavior <SfTreeGrid >
10299{
103- SfTreeGrid treegrid = null ;
104- protected override void OnAttached ()
100+ SfTreeGrid treegrid = null ;
101+
102+ protected override void OnAttached ()
103+ {
104+ treegrid = this .AssociatedObject as SfTreeGrid ;
105+ treegrid .CellRenderers .Remove (" Template" );
106+ treegrid .CellRenderers .Add (" Template" , new TreeGridCellTemplateRenderer ());
107+ treegrid .Loaded += Treegrid_Loaded ;
108+ }
109+
110+ private void Treegrid_Loaded (object sender , RoutedEventArgs e )
111+ {
112+ this .treegrid .View .NodeCollectionChanged += View_NodeCollectionChanged ;
113+ this .treegrid .View .RecordPropertyChanged += View_RecordPropertyChanged1 ;
114+ }
115+
116+ private void View_RecordPropertyChanged1 (object sender , System.ComponentModel.PropertyChangedEventArgs e )
117+ {
118+ var treeGridRowGenerator = this .treegrid .GetTreeGridRowGenerator ();
119+ var treeDataRowBase = treeGridRowGenerator .Items .FirstOrDefault (row => row .RowData == sender );
120+
121+ if (treeDataRowBase != null )
105122 {
106- treegrid = this .AssociatedObject as SfTreeGrid ;
107- treegrid .CellRenderers .Remove (" Template" );
108- treegrid .CellRenderers .Add (" Template" , new TreeGridCellTemplateRenderer ());
109- treegrid .Loaded += Treegrid_Loaded ;
110- }
111-
112- private void Treegrid_Loaded (object sender , RoutedEventArgs e )
113- {
114- this .treegrid .View .NodeCollectionChanged += View_NodeCollectionChanged ;
115- this .treegrid .View .RecordPropertyChanged += View_RecordPropertyChanged1 ;
116- }
117-
118- private void View_RecordPropertyChanged1 (object sender , System.ComponentModel.PropertyChangedEventArgs e )
119- {
120- var treeGridRowGenerator = this .treegrid .GetTreeGridRowGenerator ();
121-
122- var treeDataRowBase = treeGridRowGenerator .Items .FirstOrDefault (row => row .RowData == sender );
123- if (treeDataRowBase != null )
124- {
125- var columns = treeDataRowBase .VisibleColumns as List <TreeDataColumnBase >;
126- foreach (var dataColumn in columns .Where (column => column .Renderer != null && column .TreeGridColumn != null ))
127- {
128- dataColumn .UpdateBinding (sender , false );
129- }
123+ var columns = treeDataRowBase .VisibleColumns as List <TreeDataColumnBase >;
124+ foreach (var dataColumn in columns .Where (column => column .Renderer != null && column .TreeGridColumn != null ))
125+ {
126+ dataColumn .UpdateBinding (sender , false );
130127 }
131128 }
129+ }
130+
131+ private void View_NodeCollectionChanged (object sender , System.Collections.Specialized.NotifyCollectionChangedEventArgs e )
132+ {
133+ if (e .OldItems == null )
134+ return ;
135+
136+ var rowData = (e .OldItems [0 ] as TreeNode ).Item ;
137+ var treeGridRowGenerator = this .treegrid .GetTreeGridRowGenerator ();
138+ var treeGridDataRowBase = treeGridRowGenerator .Items .FirstOrDefault (row => row .RowData == rowData );
132139
133- private void View_NodeCollectionChanged ( object sender , System.Collections.Specialized. NotifyCollectionChangedEventArgs e )
140+ if ( treeGridDataRowBase != null )
134141 {
135- if (e .OldItems == null )
136- return ;
137- var rowData = (e .OldItems [0 ] as TreeNode ).Item ;
138- var treeGridRowGenerator = this .treegrid .GetTreeGridRowGenerator ();
139- var treeGridDataRowBase = treeGridRowGenerator .Items .FirstOrDefault (row => row .RowData == rowData );
140- if (treeGridDataRowBase != null )
141- {
142- var columns = treeGridDataRowBase .VisibleColumns as List <TreeDataColumnBase >;
143- foreach (var dataColumn in columns .Where (column => column .Renderer != null && column .TreeGridColumn != null ))
144- {
145- dataColumn .UpdateBinding (rowData , false );
146- }
142+ var columns = treeGridDataRowBase .VisibleColumns as List <TreeDataColumnBase >;
143+ foreach (var dataColumn in columns .Where (column => column .Renderer != null && column .TreeGridColumn != null ))
144+ {
145+ dataColumn .UpdateBinding (rowData , false );
147146 }
148- }
147+ }
148+ }
149149}
150-
151150```
152151
153152![ Shows the different cell types for each row based on another column cell value in SfTreeGrid] ( EachRowLoadedDifferentCell.gif )
@@ -157,8 +156,5 @@ The following screenshot shows the different cell types for each row in [WPF Tre
157156![ Shows the different cell loaded in SfTreeGrid] ( DifferentCell.png )
158157
159158Take a moment to peruse the [ WPF TreeGrid – TreeGridTemplateColumn] ( https://help.syncfusion.com/wpf/treegrid/column-type#treegridtemplatecolumn ) documentation, where you can find about [ TreeGridTemplateColumn] ( https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.TreeGrid.TreeGridTemplateColumn.html ) with code examples.
160-
161- KB article - [ How to load different cell types for each row based on another column cell value in WPF TreeGrid (SfTreeGrid)?] ( https://www.syncfusion.com/kb/12743/how-to-load-different-cell-types-for-each-row-based-on-another-column-cell-value-in-wpf )
162-
163159## Requirements to run the demo
164160Visual Studio 2015 and above versions
0 commit comments