I'd like to filter the records returned when my page with the datagrid loads.
To be clear, I'd like to filter all the records being pulled from the database, I am not trying to preset a user controllable filter on the UI. In my example code below, I'm trying to filter and return records only where the Zip is 38111.
I've been trying to get the code working in the DataFilter with OData service page in my app but keep getting "Object reference not set to an instance of an object" errors in the browser.
My Datagrid (truncated):
<RadzenDataGrid @ref="grid0" ColumnWidth="200px" AllowFiltering="true" FilterMode="FilterMode.Advanced" AllowPaging="true" AllowSorting="true" ShowPagingSummary="true" PageSizeOptions=@(new int[]{5, 10, 20, 30})
Data="@newOpportunities" Count=count LoadData=@Grid0LoadData TItem="WestElmCRM.Server.Models.WestElmCRMTenantDB.NewOpportunity" RowSelect="@EditRow" >
<Columns>
<RadzenDataGridColumn TItem="WestElmCRM.Server.Models.WestElmCRMTenantDB.NewOpportunity" Property="Date_Created" Title="Date Created">
</RadzenDataGridColumn>
<RadzenDataGridColumn TItem="WestElmCRM.Server.Models.WestElmCRMTenantDB.NewOpportunity" Property="Street" Title="Street">
</RadzenDataGridColumn>
<RadzenDataGridColumn TItem="WestElmCRM.Server.Models.WestElmCRMTenantDB.NewOpportunity" Property="City" Title="City">
</RadzenDataGridColumn>
<RadzenDataGridColumn TItem="WestElmCRM.Server.Models.WestElmCRMTenantDB.NewOpportunity" Property="State" Title="State">
</RadzenDataGridColumn>
<RadzenDataGridColumn TItem="WestElmCRM.Server.Models.WestElmCRMTenantDB.NewOpportunity" Property="Zip" Title="Zip">
</RadzenDataGridColumn>
And my code (also truncated):
RadzenDataFilter<WestElmCRM.Server.Models.WestElmCRMTenantDB.NewOpportunity> dataFilter;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
await base.OnAfterRenderAsync(firstRender);
if (firstRender)
{
await dataFilter.AddFilter(new CompositeFilterDescriptor()
{
//Property = "Stage.Name",
//FilterValue = "Incoming",
Property = "Zip",
FilterValue = "38111",
FilterOperator = FilterOperator.Equals
});
}
}
protected async Task Grid0LoadData(LoadDataArgs args)
{
try
{
var filter = args.Filter;
if (dataFilter.Filters.Any())
{
filter = !string.IsNullOrEmpty(filter) ?
$"({dataFilter.ToODataFilterString()}) and ({filter})" : dataFilter.ToODataFilterString();
}
//var result = await WestElmCRMTenantDBService.GetNewOpportunities(filter: $@"(contains(Street,""{search}"") or contains(Unit_Number,""{search}"") or contains(City,""{search}"") or contains(State,""{search}"") or contains(Carrier_Route,""{search}"") or contains(County,""{search}"") or contains(APN,""{search}"") or contains(Owner_1_Name,""{search}"") or contains(Owner_2_Name,""{search}"") or contains(Mailing_Care_Of_Name,""{search}"") or contains(Mailing_Address,""{search}"") or contains(Mailing_Unit_Number,""{search}"") or contains(Mailing_City,""{search}"") or contains(Mailing_State,""{search}"") or contains(Mailing_Carrier_Route,""{search}"") or contains(Mailing_County,""{search}"") or contains(Property_Class,""{search}"") or contains(Property_Type,""{search}"") or contains(Pool_Type,""{search}"") or contains(Last_Sale_Buyer_Name_1,""{search}"") or contains(Last_Sale_Buyer_Name_2,""{search}"") or contains(Prior_Sale_Buyer_Name_1,""{search}"") or contains(Prior_Sale_Buyer_Name_2,""{search}"") or contains(Loan_1_Type,""{search}"") or contains(Loan_1_Lender,""{search}"") or contains(Loan_1_Rate_Type,""{search}"") or contains(Loan_2_Type,""{search}"") or contains(Loan_2_Lender,""{search}"") or contains(Loan_2_Rate_Type,""{search}"") or contains(Loan_3_Type,""{search}"") or contains(Loan_3_Lender,""{search}"") or contains(Loan_3_Rate_Type,""{search}"") or contains(Loan_4_Type,""{search}"") or contains(Loan_4_Lender,""{search}"") or contains(Loan_4_Rate_Type,""{search}"") or contains(Assigned_To,""{search}"") or contains(Assigned_Cold_Caller,""{search}"") or contains(Assigned_Offer_Writer,""{search}"") or contains(Assigned_Contract_Writer,""{search}"") or contains(Assigned_Closer,""{search}"") or contains(Assigned_TC_Coordinator,""{search}"") or contains(Assigned_Disposition_Coordinator,""{search}"") or contains(Closed_Lost_Reason_Description,""{search}"") or contains(Previously_Assigned_To,""{search}"") or contains(Offer_Seller_Carryback_Financing_Terms,""{search}"") or contains(Offer_Other_Amount_Description,""{search}"") or contains(COE_Days_Or_Date,""{search}"") or contains(TC_Name,""{search}"") or contains(TC_Email,""{search}"") or contains(TC_Phone,""{search}"") or contains(Buyer_Name,""{search}"") or contains(Buyer_Business_Name,""{search}"") or contains(Buyer_Email,""{search}"") or contains(Buyer_Phone,""{search}"") or contains(MLS_Status,""{search}"") or contains(MLS_Agent_Name,""{search}"") or contains(MLS_Agent_Phone,""{search}"") or contains(MLS_Agent_Email,""{search}"") or contains(MLS_Brokerage_Name,""{search}"") or contains(MLS_Brokerage_Phone,""{search}"") or contains(Lien_Type,""{search}"")) and {(string.IsNullOrEmpty(args.Filter)? "true" : args.Filter)}", expand: "AspNetUser,AspNetUser1,AspNetUser2,AspNetUser3,AspNetUser4,AspNetUser5,AspNetUser6,ClosedLostReason,Stage,AspNetUser7,Stage1", orderby: $"{args.OrderBy}", top: args.Top, skip: args.Skip, count:args.Top != null && args.Skip != null);
//var result = await WestElmCRMTenantDBService.GetNewOpportunities(filter: $@"(contains(Street,""{search}"") or contains(Lien_Type,""{search}""))", expand: "AspNetUser,AspNetUser1,AspNetUser2,AspNetUser3,AspNetUser4,AspNetUser5,AspNetUser6,ClosedLostReason,Stage,AspNetUser7,Stage1", orderby: $"{args.OrderBy}", top: args.Top, skip: args.Skip, count: args.Top != null && args.Skip != null);
var result = await WestElmCRMTenantDBService.GetNewOpportunities(filter: filter, expand: "AspNetUser,AspNetUser1,AspNetUser2,AspNetUser3,AspNetUser4,AspNetUser5,AspNetUser6,ClosedLostReason,Stage,AspNetUser7,Stage1", orderby: $"{args.OrderBy}", top: args.Top, skip: args.Skip, count: args.Top != null && args.Skip != null);
newOpportunities = result.Value.AsODataEnumerable();
From the line number in the browser error, I suspect that the "dataFilter" is never being created.
If I break out the CompositeFilterDescriptor creation, it indeed errors on the "await dataFilter" line:
var cfd = new CompositeFilterDescriptor();
cfd.Property = "Zip";
cfd.FilterValue = 38111;
cfd.FilterOperator = FilterOperator.Equals;
await dataFilter.AddFilter(cfd);
How can I troubleshoot this further? I'm not entirely clear how my code is differing from the example.
Thanks in advance.