Skip to content

Commit 66b1275

Browse files
dimodidimodi
authored andcommitted
Revamp TreeList State article
1 parent 864edc6 commit 66b1275

File tree

11 files changed

+922
-1043
lines changed

11 files changed

+922
-1043
lines changed

_contentTemplates/treelist/editing.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,16 @@ Without using the above command buttons, the application can:
100100
[Required]
101101
public DateTime? HireDate { get; set; }
102102
public bool IsDriver { get; set; }
103+
104+
public override bool Equals(object? obj)
105+
{
106+
return obj is Employee && ((Employee)obj).Id == Id;
107+
}
108+
109+
public override int GetHashCode()
110+
{
111+
return base.GetHashCode();
112+
}
103113
}
104114

105115
#region Data Service

_contentTemplates/treelist/state.md

Lines changed: 106 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#initial-state
2-
>tip If you want to set an initial state to the TreeList, use a similar snippet, but in the [`OnStateInit event`](slug:treelist-state#set-default-initial-state)
2+
>tip If you want to set an initial state to the TreeList, use a similar snippet, but in the [`OnStateInit event`](slug:treelist-state#onstateinit)
33
#end
44

55

@@ -407,6 +407,106 @@
407407
}
408408
#end
409409

410+
#search-from-code
411+
@using Telerik.DataSource
412+
413+
<TelerikTreeList @ref="@TreeListRef"
414+
Data="@TreeListData"
415+
IdField="@nameof(SampleModel.Id)"
416+
ParentIdField="@nameof(SampleModel.ParentId)"
417+
Pageable="true"
418+
Sortable="true">
419+
<TreeListToolBarTemplate>
420+
<TreeListSearchBox />
421+
<TelerikButton Icon="@SvgIcon.Search"
422+
ThemeColor="@ThemeConstants.Button.ThemeColor.Primary"
423+
OnClick="@OnSearchButtonClick">Search Programmatically</TelerikButton>
424+
<TelerikButton Icon="@SvgIcon.X"
425+
OnClick="@OnClearButtonClick">Clear Search</TelerikButton>
426+
</TreeListToolBarTemplate>
427+
<TreeListColumns>
428+
<TreeListColumn Field="@nameof(SampleModel.Name)" Expandable="true" />
429+
<TreeListColumn Field="@nameof(SampleModel.Description)" />
430+
</TreeListColumns>
431+
</TelerikTreeList>
432+
433+
@code {
434+
private TelerikTreeList<SampleModel>? TreeListRef { get; set; }
435+
436+
private List<SampleModel> TreeListData { get; set; } = new();
437+
438+
private async Task OnSearchButtonClick()
439+
{
440+
if (TreeListRef != null)
441+
{
442+
var treelistState = TreeListRef.GetState();
443+
444+
var searchString = $"{(char)Random.Shared.Next(97, 123)}{(char)Random.Shared.Next(97, 123)}";
445+
446+
var cfd = new CompositeFilterDescriptor();
447+
448+
cfd.LogicalOperator = FilterCompositionLogicalOperator.Or;
449+
cfd.FilterDescriptors = new FilterDescriptorCollection();
450+
451+
// Add one FilterDesccriptor for each string column
452+
cfd.FilterDescriptors.Add(new FilterDescriptor()
453+
{
454+
Member = nameof(SampleModel.Name),
455+
MemberType = typeof(string),
456+
Operator = FilterOperator.Contains,
457+
Value = searchString
458+
});
459+
cfd.FilterDescriptors.Add(new FilterDescriptor()
460+
{
461+
Member = nameof(SampleModel.Description),
462+
MemberType = typeof(string),
463+
Operator = FilterOperator.Contains,
464+
Value = searchString
465+
});
466+
467+
treelistState.SearchFilter = cfd;
468+
469+
await TreeListRef.SetStateAsync(treelistState);
470+
}
471+
}
472+
473+
private async Task OnClearButtonClick()
474+
{
475+
if (TreeListRef != null)
476+
{
477+
var treelistState = TreeListRef.GetState();
478+
479+
(treelistState.SearchFilter as CompositeFilterDescriptor)?.FilterDescriptors.Clear();
480+
481+
await TreeListRef.SetStateAsync(treelistState);
482+
}
483+
}
484+
485+
protected override void OnInitialized()
486+
{
487+
for (int i = 1; i <= 500; i++)
488+
{
489+
TreeListData.Add(new SampleModel()
490+
{
491+
Id = i,
492+
ParentId = i <= 5 ? null : Random.Shared.Next(1, 6),
493+
Name = $"{(char)Random.Shared.Next(65, 91)}{(char)Random.Shared.Next(65, 91)} " +
494+
$"{(char)Random.Shared.Next(65, 91)}{(char)Random.Shared.Next(65, 91)} {i}",
495+
Description = $"{(char)Random.Shared.Next(97, 123)}{(char)Random.Shared.Next(97, 123)} " +
496+
$"{(char)Random.Shared.Next(97, 123)}{(char)Random.Shared.Next(97, 123)} {i}"
497+
});
498+
}
499+
}
500+
501+
public class SampleModel
502+
{
503+
public int Id { get; set; }
504+
public int? ParentId { get; set; }
505+
public string Name { get; set; } = string.Empty;
506+
public string Description { get; set; } = string.Empty;
507+
}
508+
}
509+
#end
410510

411511
#expand-items-from-code
412512
@*Expand a root level item on a button click*@
@@ -781,4 +881,8 @@
781881
return await Task.FromResult(data);
782882
}
783883
}
784-
#end
884+
#end
885+
886+
#statechanged-possible-prop-values
887+
The possible values for the `PropertyName` are `SortDescriptors`, `FilterDescriptors`, `SearchFilter`, `Page`, `Skip`, `ColumnStates`, `ExpandedItems`, `InsertedItem`, `OriginalEditItem`, `EditItem`.
888+
#end

components/treelist/filter/searchbox.md

Lines changed: 1 addition & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -79,104 +79,7 @@ You can set or remove the search filters programmatically through the `SearchFil
7979
>caption Set and clear the TreeList SearchBox filter programmatically
8080
8181
````RAZOR
82-
@using Telerik.DataSource
83-
84-
<TelerikTreeList @ref="@TreeListRef"
85-
Data="@TreeListData"
86-
IdField="@nameof(SampleModel.Id)"
87-
ParentIdField="@nameof(SampleModel.ParentId)"
88-
Pageable="true"
89-
Sortable="true">
90-
<TreeListToolBarTemplate>
91-
<TreeListSearchBox />
92-
<TelerikButton Icon="@SvgIcon.Search"
93-
ThemeColor="@ThemeConstants.Button.ThemeColor.Primary"
94-
OnClick="@OnSearchButtonClick">Search Programmatically</TelerikButton>
95-
<TelerikButton Icon="@SvgIcon.X"
96-
OnClick="@OnClearButtonClick">Clear Search</TelerikButton>
97-
</TreeListToolBarTemplate>
98-
<TreeListColumns>
99-
<TreeListColumn Field="@nameof(SampleModel.Name)" Expandable="true" />
100-
<TreeListColumn Field="@nameof(SampleModel.Description)" />
101-
</TreeListColumns>
102-
</TelerikTreeList>
103-
104-
@code {
105-
private TelerikTreeList<SampleModel>? TreeListRef { get; set; }
106-
107-
private List<SampleModel> TreeListData { get; set; } = new();
108-
109-
private async Task OnSearchButtonClick()
110-
{
111-
if (TreeListRef != null)
112-
{
113-
var treelistState = TreeListRef.GetState();
114-
115-
var searchString = $"{(char)Random.Shared.Next(97, 123)}{(char)Random.Shared.Next(97, 123)}";
116-
117-
var cfd = new CompositeFilterDescriptor();
118-
119-
cfd.LogicalOperator = FilterCompositionLogicalOperator.Or;
120-
cfd.FilterDescriptors = new FilterDescriptorCollection();
121-
122-
// Add one FilterDesccriptor for each string column
123-
cfd.FilterDescriptors.Add(new FilterDescriptor()
124-
{
125-
Member = nameof(SampleModel.Name),
126-
MemberType = typeof(string),
127-
Operator = FilterOperator.Contains,
128-
Value = searchString
129-
});
130-
cfd.FilterDescriptors.Add(new FilterDescriptor()
131-
{
132-
Member = nameof(SampleModel.Description),
133-
MemberType = typeof(string),
134-
Operator = FilterOperator.Contains,
135-
Value = searchString
136-
});
137-
138-
treelistState.SearchFilter = cfd;
139-
140-
await TreeListRef.SetStateAsync(treelistState);
141-
}
142-
}
143-
144-
private async Task OnClearButtonClick()
145-
{
146-
if (TreeListRef != null)
147-
{
148-
var treelistState = TreeListRef.GetState();
149-
150-
(treelistState.SearchFilter as CompositeFilterDescriptor)?.FilterDescriptors.Clear();
151-
152-
await TreeListRef.SetStateAsync(treelistState);
153-
}
154-
}
155-
156-
protected override void OnInitialized()
157-
{
158-
for (int i = 1; i <= 500; i++)
159-
{
160-
TreeListData.Add(new SampleModel()
161-
{
162-
Id = i,
163-
ParentId = i <= 5 ? null : Random.Shared.Next(1, 6),
164-
Name = $"{(char)Random.Shared.Next(65, 91)}{(char)Random.Shared.Next(65, 91)} " +
165-
$"{(char)Random.Shared.Next(65, 91)}{(char)Random.Shared.Next(65, 91)} {i}",
166-
Description = $"{(char)Random.Shared.Next(97, 123)}{(char)Random.Shared.Next(97, 123)} " +
167-
$"{(char)Random.Shared.Next(97, 123)}{(char)Random.Shared.Next(97, 123)} {i}"
168-
});
169-
}
170-
}
171-
172-
public class SampleModel
173-
{
174-
public int Id { get; set; }
175-
public int? ParentId { get; set; }
176-
public string Name { get; set; } = string.Empty;
177-
public string Description { get; set; } = string.Empty;
178-
}
179-
}
82+
@[template](/_contentTemplates/treelist/state.md#search-from-code)
18083
````
18184

18285
@[template](/_contentTemplates/treelist/state.md#initial-state)

0 commit comments

Comments
 (0)