Custom DataAdaptor filtering OnLoad of Grid

Hi,

I am using a custom DataAdapter for DataGrid and try to filter by a property (EquipmenId) at OnLoad event. How can I access PerformFiltering method on DataAdapter? Or is there any better approach?


    <SfGrid @ref="_activityLogDataGrid" TValue="ActivityLog" AllowPaging AllowSorting class="m-2">
         <SfDataManager AdaptorInstance="@typeof(LogbookDataAdapter)" Adaptor="Adaptors.CustomAdaptor" />
         <GridPageSettings PageSize="@_pageSize"></GridPageSettings>
         <GridEditSettings AllowAdding="true" AllowEditing="true" AllowDeleting="true" Mode="EditMode.Dialog"></GridEditSettings>
         <GridEvents OnLoad="OnLoad" TValue="ActivityLog" />
         <GridColumns>
             <GridColumn Field=@nameof(ActivityLog.Category) HeaderTextAlign="TextAlign.Center" HeaderText="Category" EditType="EditType.DropDownEdit" Width="100" ClipMode="ClipMode.EllipsisWithTooltip" AllowSorting></GridColumn>
             <GridColumn Field=@nameof(ActivityLog.Detail) HeaderTextAlign="TextAlign.Center" HeaderText="Detail" EditType="EditType.DropDownEdit" Width="150" ClipMode="ClipMode.EllipsisWithTooltip" AllowSorting></GridColumn>
             <GridColumn Field=@nameof(ActivityLog.LotNumber) HeaderTextAlign="TextAlign.Center" HeaderText="Lot#" Width="80"></GridColumn>
             <GridColumn Field=@nameof(ActivityLog.StartedAt) HeaderTextAlign="TextAlign.Center" HeaderText="Date" TextAlign="TextAlign.Center" EditType="EditType.DatePickerEdit" Format="d" Type="ColumnType.DateOnly" Width="100" AllowSorting></GridColumn>
             <GridColumn Field=@nameof(ActivityLog.StartedAt) HeaderTextAlign="TextAlign.Center" HeaderText="Start" TextAlign="TextAlign.Center" EditType="EditType.TimePickerEdit" Format="t" Type="ColumnType.TimeOnly" Width="80"></GridColumn>
             <GridColumn Field=@nameof(ActivityLog.EndedAt) HeaderTextAlign="TextAlign.Center" HeaderText="End" TextAlign="TextAlign.Center" EditType="EditType.TimePickerEdit" Format="t" Type="ColumnType.TimeOnly" Width="80"></GridColumn>
             <GridColumn Field=@nameof(ActivityLog.PerformedBy) HeaderTextAlign="TextAlign.Center" HeaderText="By" Width="150" AllowSorting AllowGrouping></GridColumn>
             <GridColumn Field=@nameof(ActivityLog.Comments) HeaderTextAlign="TextAlign.Center" HeaderText="Comments" Width="120"></GridColumn>
             <GridColumn HeaderText="Action" Width="150" HeaderTextAlign="TextAlign.Center">
                 <Template>
                     @{
                        var activityLog = context as ActivityLog;
                        <SfButtonGroup CssClass="e-small e-round-corner">
                            @if (!activityLog.Archived)
                            {
                                <ButtonGroupButton IconCss="mi edit md-24" @onclick="@(()=>EditLogAsync(activityLog))">Edit</ButtonGroupButton>
                                <ButtonGroupButton IconCss="mi archive md-24" @onclick="@(()=>ToggleArchiveLogAsync(activityLog))">Archive</ButtonGroupButton>
                            }
                            else
                            {
                                <ButtonGroupButton IconCss="mi archive-cancel md-24" @onclick="@(()=>ToggleArchiveLogAsync(activityLog))">Unarchive</ButtonGroupButton>
                            }
                        </SfButtonGroup>
                    }
                </Template>
            </GridColumn>
        </GridColumns>
    </SfGrid>

    public void OnLoad()
    {
        _activityLogDataGrid.DataSource.Where(x => x.EquipmentId == Id);
    }
    public class LogbookDataAdapter : DataAdaptor
    {
        private readonly LogbookDbContext _dbContext;
        private readonly IBenchlingService _benchlingService;
        private readonly BenchlingSettings _benchlingSettings;
        private Equipmen _equipmen;

        public Equipmen Equipmen
        {
            get { return _equipmen; }
            set
            {
                _equipment = value;
                ActivityLogs = _dbContext.Logs.Where(l => l.EquipmenId == value.Id && !l.Archived).AsQueryable<ActivityLog>();
            }
        }

        public IQueryable<ActivityLog> ActivityLogs { get; set; }


        public LogbookDataAdapter(LogbookDbContext dbContext, IBenchlingService benchlingService, BenchlingSettings benchlingSettings)
            : base()
        {
            _dbContext = dbContext;
            _benchlingService = benchlingService;
            _benchlingSettings = benchlingSettings;
        }


        // Performs data Read operation
        public override object Read(DataManagerRequest dataManagerRequest, string key = null)
        {
            var logs = _dbContext.Logs.AsQueryable<ActivityLog>();
            // Searching
            if (dataManagerRequest.Search != null && dataManagerRequest.Search.Count > 0)
                logs = DataOperations.PerformSearching(logs, dataManagerRequest.Search);


            // Sorting
            if (dataManagerRequest.Sorted != null && dataManagerRequest.Sorted.Count > 0)
                logs = DataOperations.PerformSorting(logs, dataManagerRequest.Sorted);


            // Filtering
            if (dataManagerRequest.Where != null && dataManagerRequest.Where.Count > 0)
                logs = DataOperations.PerformFiltering(logs, dataManagerRequest.Where, dataManagerRequest.Where[0].Operator);


            // Paging
            int count = logs.Cast<ActivityLog>().Count();
            if (dataManagerRequest.Skip != 0)
                logs = DataOperations.PerformSkip(logs, dataManagerRequest.Skip);
            if (dataManagerRequest.Take != 0)
                logs = DataOperations.PerformTake(logs, dataManagerRequest.Take);


            return dataManagerRequest.RequiresCounts ? new DataResult() { Result = logs, Count = count } : (object)logs;
        }
...}

1 Reply

PS Prathap Senthil Syncfusion Team January 23, 2024 06:06 AM UTC

Hi Yongkee,

Based on your requirements, we recommend using the GridFilterColumns component within the GridFilterSettings component to apply an initial filter. Please refer to the attached reference link for more information.


Reference:
https://blazor.syncfusion.com/documentation/datagrid/filtering#initial-filter

Regard,

Prathap S


Loader.
Up arrow icon