FilterByColumn with multiple conditions

Hi,

I am a little lost on how to filter one column programmatically with two conditions. In my case I want to filter a DateTime column to show a specific day. What I tried ist to use FilterByColumn two times but that seems to overwrite the first condition when you use the second one. Here is an example of what I tried:

      await GridRef.FilterByColumn(nameof(MonteurZeiterfassung.MitarbeiterId), "equal", selectedMitarbeiter);
      await GridRef.FilterByColumn(nameof(MonteurZeiterfassung.Start), "greaterthanorequal", datum);
      await GridRef.FilterByColumn(nameof(MonteurZeiterfassung.Start), "lessthanorequal", datumMorgen);

Is there any way to chain the last two together in code?

Best Regards
Alexander

5 Replies 1 reply marked as answer

JP Jeevakanth Palaniappan Syncfusion Team December 30, 2020 01:50 PM UTC

Hi Alexander, 

Greetings from Syncfusion support. 

We have validated your requirement and you cannot perform filtering with two conditions by using the FilterByColumn method. So we suggest you to use query property to achieve your scenario. Please refer the below code snippet and the sample for your reference. 

@using Syncfusion.Blazor.Grids 
@using Syncfusion.Blazor.Data 
@using Syncfusion.Blazor.Calendars 
 
 
<SfDateRangePicker TValue="DateTime?" @ref="DatePicker" Placeholder="Choose a Range"> 
    <DateRangePickerEvents  TValue="DateTime?" ValueChange="OnChange"></DateRangePickerEvents> 
</SfDateRangePicker> 
 
 
<SfGrid @ref="DefaultGrid" DataSource="@Orders" Query="@Qry" AllowPaging="true"> 
    <GridColumns> 
        <GridColumn Field=@nameof(Order.OrderDate) HeaderText=" Order Date" Format="d" Type="ColumnType.Date" TextAlign="TextAlign.Right" Width="130"></GridColumn> 
   </GridColumns> 
</SfGrid> 
 
@code{ 
    private SfGrid<Order> DefaultGrid; 
    public Query Qry = new Query(); 
    SfDateRangePicker<DateTime?> DatePicker { get; set; } 
    public List<Order> Orders { get; set; } 
    public void OnChange(RangePickerEventArgs<DateTime?> Args) 
    { 
        var Col1Pre = new WhereFilter(); 
        var predicate = new List<WhereFilter>(); 
        predicate.Add(new WhereFilter() { Condition = "or", Field = "OrderDate", value = Args.StartDate, Operator = "greaterthanorequal" }); 
        predicate.Add(new WhereFilter() { Condition = "or", Field = "OrderDate", value = Args.EndDate, Operator = "lessthanorequal" }); 
        Col1Pre = WhereFilter.And(predicate); 
        Qry = new Query().Where(Col1Pre); // to filter the Grid  
    } 
} 


Regards, 
Jeevakanth SP. 


Marked as answer

AS Alexander Schröders December 31, 2020 01:34 PM UTC

Hi Jeevakanth,

thank you very much for the example. This is exactly what I wanted and it works like a charm.

Regards
Alexander


JP Jeevakanth Palaniappan Syncfusion Team January 4, 2021 05:26 AM UTC

Hi Alexander, 

Thanks for the update. Please get back to us if you have any other queries. 

Regards, 
Jeevakanth SP. 



AK Akhila July 11, 2022 03:57 PM UTC

Am looking for FilterByColumn with multiple conditions.  Example: Filtering by multiple CustomerIds in a column. ( Any of CustomerIds )




MS Monisha Saravanan Syncfusion Team July 12, 2022 12:38 PM UTC

Hi Akhila,


Greetings from Syncfusion support.


Query: “Am looking for FilterByColumn with multiple conditions.  Example: Filtering by multiple CustomerIds in a column. ( Any of CustomerIds )”


We have validated your query and we suspect that you want to filter multiple values by using FilterByColumn method. If yes, then you can achieve this requirement by using below way.


Reference:

https://www.syncfusion.com/kb/12472/how-to-perform-multiple-value-filtering-for-same-column-in-grid


 

<button @onclick="Filter">Filter multiple values in same column(CustomerID)</button>

 

<SfGrid @ref="Grid" DataSource="@Orders" AllowFiltering="true" AllowPaging="true">

    <GridFilterSettings Type="Syncfusion.Blazor.Grids.FilterType.Excel"></GridFilterSettings>

    <GridColumns>

        . . .

    </GridColumns>

</SfGrid>

 

@code{

    SfGrid<Order> Grid { get; set; }

    . . .

    public async Task Filter()

    {

       await Grid.FilterByColumnAsync("CustomerID", "equal", new List<string> { "ALFKI", "BLONP" }, "or");

       }

}



Kindly get back to us if you have further queries.


Regards,

Monisha


Loader.
Up arrow icon