Skip to content

Commit 0f3fc0f

Browse files
Merge pull request #3 from SweathaBharathi/patch-1
Update README.md
2 parents 61fa802 + 4131327 commit 0f3fc0f

File tree

1 file changed

+91
-95
lines changed

1 file changed

+91
-95
lines changed

README.md

Lines changed: 91 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -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

4747
public 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

9795
The **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-
10198
public 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

159158
Take 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
164160
Visual Studio 2015 and above versions

0 commit comments

Comments
 (0)