@page
@model NorthwindRazor.Pages.Products_ListSearchModel
@{
    ViewData["Title"] = "List of Products";
 
    string supplierIDSelectValues = ":";
    string categoryIDSelectValues = ":";
 
    // set the data that's going to be used by the SupplierID select tag in the jqgrid.
    foreach (var item in Model.SuppliersDropDownListData.OrderBy(s => s.SupplierID))
    {
        supplierIDSelectValues += ";" + item.SupplierID + ":" + item.SupplierID;
    }
 
    // set the data that's going to be used by the CategoryID select tag in the jqgrid.
    foreach (var item in Model.CategoriesDropDownListData.OrderBy(c => c.CategoryID))
    {
        categoryIDSelectValues += ";" + item.CategoryID + ":" + item.CategoryID;
    }
}
 
@section AdditionalCss {
    <link rel="stylesheet" href="~/css/ui.jqgrid.min.css" />
}
 
@section AdditionalJavaScript {
    <script src="~/js/jqgrid-i18n/grid.locale-en.min.js" asp-append-version="true"></script>
    <script src="~/js/jquery-jqgrid-4.13.2.min.js" asp-append-version="true"></script>
    <script src="~/js/jqgrid-listsearch.js" asp-append-version="true"></script>
    <script src="~/js/jquery.searchFilter.min.js" asp-append-version="true"></script>
 
    <script type="text/javascript">
        $(function () {
            var checkBoxSelectValues = ":;True:<input type='checkbox' checked disabled /> True;False:<input type='checkbox' disabled /> False";
            var supplierIDSelectValues = '@supplierIDSelectValues';
            var categoryIDSelectValues = '@categoryIDSelectValues';
 
            $('#list-grid').jqGrid({
                url: '/Products/Products_ListSearch?handler=GridDataWithFilters',
                datatype: 'json',
                mtype: 'GET',
                colNames: ['Product ID','Product Name','Supplier ID','Category ID','Quantity Per Unit','Unit Price','Units In Stock','Units On Order','Reorder Level','Discontinued'],
                colModel: [
                    { name: 'ProductID', index: 'ProductID', align: 'right' },
                    { name: 'ProductName', index: 'ProductName', align: 'left', searchoptions: { sopt: ['cn']} },
                    { name: 'SupplierID', index: 'SupplierID', align: 'left', formatter: 'select', stype: 'select', edittype: 'select', editoptions: { value: supplierIDSelectValues } },
                    { name: 'CategoryID', index: 'CategoryID', align: 'left', formatter: 'select', stype: 'select', edittype: 'select', editoptions: { value: categoryIDSelectValues } },
                    { name: 'QuantityPerUnit', index: 'QuantityPerUnit', align: 'left', searchoptions: { sopt: ['cn']} },
                    { name: 'UnitPrice', index: 'UnitPrice', align: 'right', formatter: 'currency', formatoptions: { decimalPlaces: 2, prefix: "$"} },
                    { name: 'UnitsInStock', index: 'UnitsInStock', align: 'right', formatter: 'integer' },
                    { name: 'UnitsOnOrder', index: 'UnitsOnOrder', align: 'right', formatter: 'integer' },
                    { name: 'ReorderLevel', index: 'ReorderLevel', align: 'right', formatter: 'integer' },
                    { name: 'Discontinued', index: 'Discontinued', align: 'center', formatter: 'select', stype: 'select', edittype: 'select', editoptions: { value: checkBoxSelectValues } }
                ],
                pager: $('#list-pager'),
                rowNum: 10,
                pageable: true,
                jsonReader:
                {
                    page: "d.page"
                },
                rowList: [5, 10, 20, 50],
                sortname: 'ProductID',
                sortorder: "asc",
                viewrecords: true,
                caption: 'List of Products',
                height: '100%',
                width: '1200',
                ignoreCase: true
            }).jqGrid('navGrid''#list-pager', { edit: false, add: false, del: false, search: false, refresh: false });
 
            $('#list-grid').jqGrid('filterToolbar', { stringResult: true, searchOnEnter: false, beforeSearch: function () {
                // validate entered data before searching
                var postData = $('#list-grid').jqGrid('getGridParam''postData');
                var searchData = $.parseJSON(postData.filters);
                var isThereValidationErrors = false;
                var validationErrors = '';
 
                for (var iRule = 0; iRule < searchData.rules.length; iRule++) {
                    var enteredValue = searchData.rules[iRule].data;
 
                    if (searchData.rules[iRule].field == 'ProductID' && !isNumeric(enteredValue)) {
                        validationErrors += '  Product ID must be a valid number.';
                        isThereValidationErrors = true;
                    }
                    if (searchData.rules[iRule].field == 'UnitPrice' && !isDecimal(enteredValue)) {
                        validationErrors += '  Unit Price must be a valid decimal number.';
                        isThereValidationErrors = true;
                    }
                    if (searchData.rules[iRule].field == 'UnitsInStock' && !isNumeric(enteredValue)) {
                        validationErrors += '  Units In Stock must be a valid number.';
                        isThereValidationErrors = true;
                    }
                    if (searchData.rules[iRule].field == 'UnitsOnOrder' && !isNumeric(enteredValue)) {
                        validationErrors += '  Units On Order must be a valid number.';
                        isThereValidationErrors = true;
                    }
                    if (searchData.rules[iRule].field == 'ReorderLevel' && !isNumeric(enteredValue)) {
                        validationErrors += '  Reorder Level must be a valid number.';
                        isThereValidationErrors = true;
                    }
                }
 
                if(isThereValidationErrors)
                    alert($.trim(validationErrors));
 
                return isThereValidationErrors;
            }
            });
        });
 
        // rename the page parameter to _page because asp.net core razor's page model
        // does not recognize the page parameter when passed
        $.extend(jQuery.jgrid.defaults, {
            prmNames: {
                page: "_page"
            }
        });
    </script> 
}
 
<h2>@ViewData["Title"]</h2>
<br /><br />
<table id="list-grid"></table>
<div id="list-pager"></div>