Retrieving a list of objects in ABP, C#

Viewed 67

I'm working with the ABP tutorials on https://docs.abp.io/en/abp/latest/Tutorials/Part-3?UI=BlazorServer&DB=Mongo with the Acme.BookStore project. I have a list of Books and I want to use a custom filter to filter specifically by the name of the book. I know this is a simple process because I've seen examples (without code) showing how this works visually.

So far I've tried adapting the instructions from this part of the documentation: enter link description here (at 'Custom Column Filtering'). However, this code relies on manually creating a list of the objects you want to filter using the code below under '@code':

private List<Employee> employeeList = new() { new() { FirstName = "David", Gender = "M" }, new() { FirstName = "Mladen", Gender = "M" }, new() { FirstName = "John", Gender = "M" }, new() { FirstName = "Ana", Gender = "F" }, new() { FirstName = "Jessica", Gender = "F" } };

With this method I'm not filtering the list of books I already have, I'm filtering through a static list that I must construct. Is there a simple way to collect all the objects of type 'Book'? (those that are presented on my .razor page)

This is my code for the Razor page:

@page "/books"
@using Volo.Abp.Application.Dtos
@using Acme.BookStore.Books
@using Acme.BookStore.Localization
@using Microsoft.Extensions.Localization
@using Volo.Abp.Localization
@using Volo.Abp.AspNetCore.Components.Web
@inject IStringLocalizer<BookStoreResource> L
@inject AbpBlazorMessageLocalizerHelper<BookStoreResource> LH

@inherits AbpCrudPageBase<IBookAppService, BookDto, Guid, PagedAndSortedResultRequestDto, CreateUpdateBookDto>

<Card>
    <CardHeader>
        <Row Class="justify-content-between">
            <Column ColumnSize="ColumnSize.IsAuto">
                 <h2>@L["Books"]</h2>
            </Column>
            <Column ColumnSize="ColumnSize.IsAuto">
                <Button Color="Color.Primary"
                    Clicked="OpenCreateModalAsync">@L["NewBook"]</Button>
            </Column>
        </Row>
    </CardHeader>

<CardBody>
    <DataGrid TItem="BookDto"
              Data="Entities"
              ReadData="OnDataGridReadAsync"
              TotalItems="TotalCount"
              ShowPager="true"
              PageSize="PageSize">
        <DataGridColumns>
            <DataGridEntityActionsColumn TItem="BookDto" @ref="@EntityActionsColumn">
                <DisplayTemplate>
                    <EntityActions TItem="BookDto" EntityActionsColumn="@EntityActionsColumn">
                        <EntityAction TItem="BookDto"
                                      Text="@L["Edit"]"
                                      Clicked="() => OpenEditModalAsync(context)" />
                        <EntityAction TItem="BookDto"
                          Text="@L["Delete"]"
                          Clicked="() => DeleteEntityAsync(context)"
                          ConfirmationMessage="() => GetDeleteConfirmationMessage(context)" />
                    </EntityActions>
                </DisplayTemplate>
            </DataGridEntityActionsColumn>
            <DataGridColumn TItem="BookDto"
                            Field="@nameof(BookDto.Name)"
                            Caption="@L["Name"]"></DataGridColumn>
            <DataGridColumn TItem="BookDto"
                            Field="@nameof(BookDto.Type)"
                            Caption="@L["Type"]">
                <DisplayTemplate>
                    @L[$"Enum:BookType:{(int)context.Type}"]
                </DisplayTemplate>
            </DataGridColumn>
            <DataGridColumn TItem="BookDto"
                            Field="@nameof(BookDto.PublishDate)"
                            Caption="@L["PublishDate"]">
                <DisplayTemplate>
                    @context.PublishDate.ToShortDateString()
                </DisplayTemplate>
            </DataGridColumn>
            <DataGridColumn TItem="BookDto"
                            Field="@nameof(BookDto.Price)"
                            Caption="@L["Price"]">
            </DataGridColumn>
            <DataGridColumn TItem="BookDto"
                            Field="@nameof(BookDto.CreationTime)"
                            Caption="@L["CreationTime"]">
                <DisplayTemplate>
                    @context.CreationTime.ToLongDateString()
                </DisplayTemplate>
            </DataGridColumn>
        </DataGridColumns>
    </DataGrid>
</CardBody>

The page already retrieves this list as is but uses in-built functions for the DataGrid properties etc. - is there a way to easily tap into this to use when filtering?

0 Answers
Related