Premmerce Documentation > Table or Grid > Filter column

About Premmerce

Introduction

Full Features

Installation

Prerequisite

Setup & Installation

Table or Grid

Basic Usage

Disable Column Sorting

Disable Column Export

Change Search Placeholder

Custom Column Template

Add Buttons to Action Column

Hyperlink Column Text

Specific Roles to View Column

Add or remove column

Filter column

CSS and JS

Edit Color

File validation

General

Password Validation

Bulk Import

Other

/Views/Order/Manage.cshtml

<div id="@ViewBag.TableId" class="position-relative" data-filename="Orders" data-loadtable="@Url.Action("LoadTableManageOrder", "Order")"
     data-table-sort="" data-table-size="" data-table-search="" data-table-pg="" data-table-month="" data-table-year="" data-table-status="">

    @await Html.PartialAsync("_TableLengthAndSearch", new TableLengthViewModel { ShowFilter = true, FilterDivId = $"filter-{ViewBag.TableId}" })

    <div id="[email protected]" class="row justify-content-end align-items-end g-1 pb-1 d-none">

        <partial name="_FilterMonthYear" view-data='@(new ViewDataDictionary(ViewData) { { "FilterMonthYearTableId", ViewBag.TableId } })' />

        <!-- The filterTable() function is defined in auratheme.table.js -->
        <!-- On selection change, filterTable() sets data-table-status="" with the selected value and refreshes the table -->
        <div class="col-6 col-md-4 col-lg-2">
            @Helper.CustomDropDown("FilterStatus", Helper.GetOrderStatusSelectList(), true, "filterTable(this,'status','" + ViewBag.TableId + "')", $"{Resource.Filter} {Resource.Status}")
        </div>

    </div>

    @await Html.PartialAsync("_LoadingTable")
</div>

OrderService.cs: Perform filtering when read the records

public async Task<TableViewModel> LoadTableManageOrder(dynamic requestData, ViewDataDictionary viewData)
{
    try
    {
        TableActionViewModel tableAction = TableHelper.SetSortSizeSearchPg(requestData, ManageOrderTableConfig.TableConfig);
        List<ColumnProperty> headers = TableHelper.SetColumnOrderAction(ManageOrderTableConfig.FullTableColumns, tableAction.Sort);

        string? month = requestData.month?.Value;
        string? year = requestData.year?.Value;
        string? status = requestData.status?.Value;

        var list = ReadRecords(true, month, year, status);
        list = ManageOrderTableConfig.PerformSearch(list, tableAction.Search);
        list = TableHelper.PerformSort(list, ManageOrderTableConfig.TableConfig, tableAction.Sort);

        int total = list.Count();
        TableHelper.SetViewData(viewData, tableAction, total, ManageOrderTableConfig.TableConfig);
        int size = int.TryParse(tableAction.Size.ToString(), out int parsedSize) ? parsedSize : tableAction.Size;
        PaginatedList<OrderViewModel> currentPageResult = await PaginatedList<OrderViewModel>.CreateAsync(list, tableAction.Page, size, total, headers);

        TableViewModel tableView = TableHelper.GenerateTableView(currentPageResult, headers, ManageOrderTableConfig.TableConfig, tableAction.Search, total);
        tableView = TableHelper.GenerateRowsColumns(currentPageResult, headers, tableView, ManageOrderTableConfig.TableConfig);

        return tableView;
    }
    catch (Exception ex)
    {
        _generalService.LogError(ex);
        throw;
    }
}

public IQueryable<OrderViewModel> ReadRecords(bool management = false, string? month = null, string? year = null, string? status = null)
{
    month = string.IsNullOrEmpty(month) ? "0" : month;
    year = string.IsNullOrEmpty(year) ? "0" : year;
    int monthValue = Convert.ToInt32(month);
    int yearValue = Convert.ToInt32(year);

    string statusId = "";
    if (!string.IsNullOrWhiteSpace(status))
    {
        statusId = _generalService.GetGlobalOptionSetId(status, "OrderStatus");
    }

    string userId = _generalService.GetCurrentUserId();
    var result = from t1 in _db.Orders
                 join t2 in _db.GlobalOptionSets on t1.StatusId equals t2.Id
                 join t3 in _db.GlobalOptionSets on t1.CurrencyId equals t3.Id
                 where t1.IsDeleted == false
                 && (
                 (management == false && !string.IsNullOrEmpty(userId) && t1.CreatedByUserId == userId) ||
                 management == true
                 )
                 && (month == "0" || (monthValue > 0 && t1.CreatedOn != null && t1.CreatedOn.Value.Month == monthValue))
                 && (year == "0" || (yearValue > 0 && t1.CreatedOn != null && t1.CreatedOn.Value.Year == yearValue))
                 && (!string.IsNullOrWhiteSpace(statusId) ? t1.StatusId == statusId : true)
                 select new OrderViewModel
                 {
                     Id = t1.Id,
                     OrderNumber = t1.OrderNumber,
                     StatusId = t1.StatusId,
                     EmailAddress = t1.EmailAddress,
                     CustomerRemarks = t1.CustomerRemarks,
                     StatusRemarks = t1.StatusRemarks,
                     FirstName = t1.FirstName,
                     LastName = t1.LastName,
                     TrackingNumber = t1.TrackingNumber,
                     PaymentGateway = t1.PaymentGateway,
                     StatusCode = t2.Code,
                     StatusName = t2.DisplayName,
                     Currency = t3.Code,
                     PaidTotalCost = t1.PaidTotalCost,
                     RefundId = t1.RefundId,
                     RefundedOn = t1.RefundedOn,
                     CreatedOn = t1.CreatedOn,
                     CreatedByUserId = t1.CreatedByUserId
                 };
    return result;
}