When I filter out data on tree list I am running into 2 issues:
1) the number of pages doesn't reflect the number of items shown in the list
2) the child items will remain in the list even if filtered out
My expectation is that when filter is applied, it would only show Carla and have 1 page on paging bar. Strangely if I execute $("#AttendeeGrid").data("kendoTreeList").dataSource.read(); again after filtering through browser console the children are then removed.
View
<
script
type
=
"text/javascript"
>
var filter = false;
function toggleFilter() {
filter = !filter;
$("#AttendeeGrid").data("kendoTreeList").dataSource.read();
$("#AttendeeGrid").data("kendoTreeList").dataSource.page(1);
}
function attendeeParams() {
return {
myFilter: filter
}
}
</
script
>
@(Html.Kendo().TreeList<
AttendeeItem
>()
.Name("AttendeeGrid")
.Columns(columns =>
{
columns.Add().Field(x => x.firstName).Title("First");
})
.Sortable()
.DataSource(dataSource => dataSource
.ServerOperation(false)
.Read(read => read.Action("attendee_Read", "Home").Data("attendeeParams"))
.Model(m => {
m.Id(x => x.primaryRegistrationId);
m.ParentId(x => x.parentRegistrationId);
m.Expanded(true);
})
)
.Pageable(p => p.PageSize(5))
.Scrollable(false)
)
<
button
onclick
=
"toggleFilter()"
>Toggle filter</
button
>
Controller
...
public IActionResult attendee_Read([DataSourceRequest] DataSourceRequest request, GetAttendeesParams getAttendeesParams)
{
AttendeeItem[] items;
if (getAttendeesParams.myFilter)
{
items = new[]
{
new AttendeeItem
{
primaryRegistrationId = 1,
firstName = "Carla",
parentRegistrationId = null
}
};
}
else
{
items = new[]
{
new AttendeeItem
{
primaryRegistrationId = 1,
firstName = "Carla",
parentRegistrationId = null
},
new AttendeeItem
{
primaryRegistrationId = 2,
firstName = "Roger",
parentRegistrationId = null
},
new AttendeeItem
{
primaryRegistrationId = 3,
firstName = "Katy",
parentRegistrationId = null
},
new AttendeeItem
{
primaryRegistrationId = 4,
firstName = "Bob",
parentRegistrationId = null
},
new AttendeeItem
{
primaryRegistrationId = 5,
firstName = "Avni",
parentRegistrationId = 1
},
new AttendeeItem
{
primaryRegistrationId = 6,
firstName = "George",
parentRegistrationId = null
},
};
}
return Json(items.ToTreeDataSourceResult(request));
}
}
public class AttendeeItem
{
public string firstName { get; set; }
public int primaryRegistrationId { get; set; }
public int? parentRegistrationId { get; set; }
}
public class GetAttendeesParams
{
public bool myFilter { get; set; }
}