|
<SfGrid DataSource="@Orders" AllowFiltering="true" AllowPaging="true" Height="375">
<GridEvents OnActionBegin="ActionBeginHandler" TValue="Order"></GridEvents>
<GridFilterSettings Type="Syncfusion.Blazor.Grids.FilterType.Excel"></GridFilterSettings>
<GridColumns>
<GridColumn Field=@nameof(Order.OrderID) HeaderText="Order ID" TextAlign="TextAlign.Right" Width="120"></GridColumn>
<Template>
@{
var filterContext = (context as Order);
var itemTemplateValue = Employees.Find(x => x.EmployeeID == filterContext.EmployeeID);
}
@itemTemplateValue.FirstName - @itemTemplateValue.LastName
</Template>
<FilterItemTemplate>
@{
var filterContext = (context as FilterItemTemplateContext);
var itemTemplateValue = Employees.Find(x => x.EmployeeID.ToString() == filterContext.Value.ToString());
}
@itemTemplateValue.FirstName - @itemTemplateValue.LastName
</FilterItemTemplate>
</GridColumn>
<GridColumn Field=@nameof(Order.OrderDate) HeaderText=" Order Date" Format="d" Type="ColumnType.Date" TextAlign="TextAlign.Right" Width="130"></GridColumn>
<GridColumn Field=@nameof(Order.Freight) HeaderText="Freight" Format="C2" TextAlign="TextAlign.Right" Width="120"></GridColumn>
</GridColumns>
</SfGrid>
@code{
public List<Order> Orders { get; set; }
public string FilterCol { get; set; }
public List<Employee> Employees { get; set; }
public void ActionBeginHandler(ActionEventArgs<Order> Args)
{
if (Args.RequestType == Syncfusion.Blazor.Grids.Action.FilterBeforeOpen)
{
//to find the current filtering column name
FilterCol = Args.ColumnName;
}
if (Args.RequestType == Syncfusion.Blazor.Grids.Action.FilterSearchBegin)
{
if (string.Equals(FilterCol, "EmployeeID", StringComparison.Ordinal))
{
//pass the searchstring to custommethod and return the data
var lists = GetSearchedList(Args.SearchString);
//bind resultant list to CheckboxListData.
Args.CheckboxListData = lists;
}
}
}
public List<Order> GetSearchedList(string key)
{
var empdata = Employees.Where(fil => fil.FirstName.ToLower().ToString().StartsWith(key.ToLower()) || fil.FirstName.ToLower().ToString().StartsWith(key.ToLower())).Select(x=>x.EmployeeID).ToList();
var data = new List<Order>();
foreach (var emp in empdata)
{
data.Add(Orders.Where(x => x.EmployeeID.Equals(emp)).FirstOrDefault());
}
//perform your custom action.
return data;
}
|
|
public void ActionBeginHandler(ActionEventArgs<Order> Args)
{
if (Args.RequestType == Syncfusion.Blazor.Grids.Action.FilterBeforeOpen)
{
//to find the current filtering column name
FilterCol = Args.ColumnName;
}
if (Args.RequestType == Syncfusion.Blazor.Grids.Action.FilterSearchBegin)
{
if (string.Equals(FilterCol, "EmployeeID", StringComparison.Ordinal)) //checked the Column before providing data
{
//pass the searchstring to custommethod and return the data
var lists = GetSearchedList(Args.SearchString);
//bind resultant list to CheckboxListData.
Args.CheckboxListData = lists;
}
}
}
|
Hi Rahul,
Are there any updates on this ticket?
Thanks,
Kenney
Hi Rahul,
The search operation for Checkbox filter with FilterItemTemplate is still not working for integer column even in v19.2.0.56.
I have attached a video demonstrating the same issue and the razor code.
Thanks,
Kenney
|
<SfGrid DataSource="@Orders" AllowFiltering="true" AllowPaging="true" Height="375">
<GridEvents OnActionBegin="ActionBeginHandler" TValue="Order"></GridEvents>
<GridFilterSettings Type="Syncfusion.Blazor.Grids.FilterType.Excel"></GridFilterSettings>
<GridColumns>
. ..
<Template>
@{
var filterContext = (context as Order);
var itemTemplateValue = Employees.Find(x => x.EmployeeID == filterContext.EmployeeID);
}
@itemTemplateValue.FirstName - @itemTemplateValue.LastName
</Template>
<FilterItemTemplate>
@{
var filterContext = (context as FilterItemTemplateContext);
var itemTemplateValue = Employees.Find(x => x.EmployeeID.ToString() == filterContext.Value.ToString());
}
@itemTemplateValue.FirstName ( @itemTemplateValue.LastName)
</FilterItemTemplate>
</GridColumn>
. . .
</GridColumns>
</SfGrid>
@code{
public List<Order> Orders { get; set; }
public string FilterCol { get; set; }
public List<Employee> Employees { get; set; }
public void ActionBeginHandler(ActionEventArgs<Order> Args)
{
if (Args.RequestType == Syncfusion.Blazor.Grids.Action.FilterBeforeOpen)
{
//to find the current filtering column name
FilterCol = Args.ColumnName;
}
if (Args.RequestType == Syncfusion.Blazor.Grids.Action.FilterSearchBegin)
{
if (string.Equals(FilterCol, "EmployeeID", StringComparison.Ordinal))
{
//pass the searchstring to custommethod and return the data
var lists = GetSearchedList(Args.SearchString);
//bind resultant list to CheckboxListData.
Args.CheckboxListData = lists;
}
}
}
public List<Order> GetSearchedList(string key)
{
//you need to handle the search and return the search result
var empdata = Employees.Where(fil => fil.FirstName.ToLower().ToString().StartsWith(key.ToLower()) || fil.FirstName.ToLower().ToString().StartsWith(key.ToLower())).Select(x=>x.EmployeeID).ToList();
var data = new List<Order>();
foreach (var emp in empdata)
{
data.Add(Orders.Where(x => x.EmployeeID.Equals(emp)).FirstOrDefault());
}
//perform your custom action and return
return data;
}
. . .
} |