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;
}
...}
SIGN IN To post a reply.
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
SIGN IN To post a reply.
- 1 Reply
- 2 Participants
-
YC Yongkee Cho
- Jan 22, 2024 06:21 PM UTC
- Jan 23, 2024 06:06 AM UTC