i want to filter the grid using a column filter template with <SfMultiSelect />, for that i use a wherefilter, but i can not search for the Value, in this context: Id, only Text it used for it.
The column data(text) is different from the checkbox menu, with the new system we are doing we renamed some fields, but they might stay the same in the database...
// external cs file
public class StatusModel
{
public int Id { get; set; }
public string Name { get; set; }
}
public static List<StatusModel> Statuses = new List<StatusModel>() {
new StatusModel(){ Id = 1, Name = "Neu" },
new StatusModel(){ Id = 2, Name = "Angebot (versendet)" },
new StatusModel(){ Id = 3, Name = "in Bearbeitung" },
new StatusModel(){ Id = 4, Name = "Abschluss (Vertrag)" },
new StatusModel(){ Id = 5, Name = "Bestelleintritt" },
new StatusModel(){ Id = 6, Name = "Suchen ?!" },
new StatusModel(){ Id = 7, Name = "Abgelehnt" },
new StatusModel(){ Id = 8, Name = "Geprüftes Angebot (versendet)" },
new StatusModel(){ Id = 9, Name = "Wiedervorlage ?!" },
new StatusModel(){ Id = 10, Name = "Rückfragen" },
new StatusModel(){ Id = 11, Name = "In Prüfung" },
new StatusModel(){ Id = 12, Name = "Leasingunterlagen (versendet)" },
new StatusModel(){ Id = 13, Name = "Leasingunderlagen (Rücklauf)" },
new StatusModel(){ Id = 14, Name = "Zahlung" },
new StatusModel(){ Id = 15, Name = "Abgelehnt (privat)" },
new StatusModel(){ Id = 16, Name = "Abgelehnt (sonstige)" },
};
public static List<StatusModel> GetDefaultStatus(){
return new List<StatusModel>(){
Statuses[0]
};
}
// razor file
//TODO: get it working with custom text ("Angebot versendet" != "Angebot")
public void SetStatusFilter()
{
Query newQuery = new Query();
List<WhereFilter> Filters = new List<WhereFilter>();
WhereFilter ColPredicates;
foreach(var selectedStatus in EasyTable.SelectedStatus)
{
WhereFilter StatusFilter = new WhereFilter(){
Field = "Status",
// value = "Neu", // works
value = selectedStatus.Id, // or .Name, which works
Operator = "equals",
IgnoreCase = true
};
Filters.Add(StatusFilter);
JS.InvokeVoidAsync("console.log", selectedStatus.Id.ToString());
}
ColPredicates = WhereFilter.Or(Filters);
GridQuery = newQuery.Where(ColPredicates);
}
// and
<GridColumn Field="Status"
HeaderText="Status"
MinWidth="50"
Width="75"
MaxWidth="300"
TextAlign="TextAlign.Left">
<FilterTemplate>
<SfMultiSelect
@bind-Value=EasyTable.SelectedStatus
TValue="@(List<EasyTable.StatusModel>)"
TItem=EasyTable.StatusModel
AllowFiltering=false
Placeholder=""
Mode=VisualMode.CheckBox
DataSource=EasyTable.Statuses
FilterBarPlaceholder=""
PopupHeight="600px"
PopupWidth="350px"
>
<MultiSelectEvents
TItem="EasyTable.StatusModel"
TValue="List<EasyTable.StatusModel>"
OnClose="() => SetStatusFilter()"
/>
@* only Name is searched, not Id *@
<MultiSelectFieldSettings
Text="Name"
Value="Id"
/>
</SfMultiSelect>
</FilterTemplate>
</GridColumn>