|
1 | 1 | #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) |
3 | 3 | #end |
4 | 4 |
|
5 | 5 |
|
|
407 | 407 | } |
408 | 408 | #end |
409 | 409 |
|
| 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 |
410 | 510 |
|
411 | 511 | #expand-items-from-code |
412 | 512 | @*Expand a root level item on a button click*@ |
|
781 | 881 | return await Task.FromResult(data); |
782 | 882 | } |
783 | 883 | } |
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 |
0 commit comments