Skip to content

This classes helps you to implement a .net code which render a datatable in server side, with the pagination, order and all it features.

Notifications You must be signed in to change notification settings

FakeSe/DotNetDataTable-Server-side

Repository files navigation

DotNetDataTable : Implement a server side rendering DataTable (Back+Front)

Just add or Copy/past DataTablesRequest.cs to your project and follow the steps if you don't know how to use it

How to use : 1- First, add DataTablesRequest.cs to your project, don't forget to change the namespace as you wish.

2- Now, in your controller add this notation before you function : [HttpPost("/A_Custom_route_name")] or just [HttpPost]

3- The first thing is to extract the parameters from the datatable request and for that we have 2 options :

A/ Take your request as a string then convert it to JSon :
    Example :
         [HttpPost]
         public JsonResult RenderDataTable(string req)
         {
             var dtParms = req.FromJson<DataTablesRequest>();
             ...
          }
     To use this option, consider installing the Newtonsoft package, in package manager write this : 
          Install-Package Newtonsoft.Json -Version 10.0.3
       
 in this case, for the frontend (the script part) take a look at Frontend-String-Request.js to know how your ajax request must look like
 
 
  B/ Directly take your request as a DataTableRequest Object :
       Example :
         [HttpPost]
         public JsonResult RenderDataTable( [FromBody] DataTablesRequest dtParms)
         {
            //You already have your dtParms so just use it
          }
       in this case, for the frontend (the script part) take a look at Frontend-DataTableRequest-Object.js to know how your ajax                  request must look like

4- now let's implement the rest, supposing that you got your dtParms, your function should look like this :

  [HttpPost]
    public JsonResult RenderDataTable( [FromBody] DataTablesRequest dtParms)
    {
    //Get all your data, we need it to return the total count to dataTable
        var toQuery = _dbContext.YourTable.AsNoTracking().Where(f => true);
        
    //The TotalCount is required from DataTable so before filtring our records we place it somewhere
        var totalCount = toQuery.Count();
        
    //Now let's define/get our records that we need
        var dataPage = toQuery;

    //First we check if there is a search filter, if yes we filter our results :
        if (!string.IsNullOrEmpty(dtParms.Search.Value))
        {
            dataPage = dataPage.Where(u => u.The_Column_That_We_Will_Filter.ToUpper().Contains(dtParms.Search.Value));
            //You can add as columns as you want
        }
    //Then we check if the datatable require a sorting for data :
        if (dtParms.Order != null)
        { 
        //If true, we get the sorting informations (which column and direction "ASC" or "DESC"
            var requestedOrder = dtParms.Order.FirstOrDefault();
         //And based on those informations we sort our data:
            switch (requestedOrder.Column)
            {
            //if the datatable requested a sorting on the column 0 you sort that column in your records:
                case 0: 
                    dataPage = requestedOrder.Dir.ToUpper().Equals("DESC") ?  
                             dataPage.OrderByDescending(f => f.The_column_that_corresponding_the_column0_in_your_datatable) 
                             : dataPage.OrderBy(f => f.The_column_that_corresponding_the_column0_in_your_datatable);
                    break;
                case 1:
                    dataPage = requestedOrder.Dir.ToUpper().Equals("DESC") ? 
                              dataPage.OrderByDescending(f => f.The_column_that_corresponding_the_column1_in_your_datatable) 
                               : dataPage.OrderBy(f => f.The_column_that_corresponding_the_column1_in_your_datatable);
                    break;
            }
        }
        
    //Get the results :
        var results = dataPage.Skip(dtParms.Start).Take(dtParms.Length).Select(a => new Your_Model_or_object
        {
            Column0 = a.YourDBTable.Column_that_corresponding_Column0,
            Column1 = a.YourDBTable.Column_that_corresponding_Column0
    }).ToList();
    //The filtredCount is how much records will you return, DataTable require this informations to create the pagination
        var filteredCount = dataPage.Count();

    //This will create the response desired by DataTable
        var res = DataTableResponse.Create(dtParms, totalCount, filteredCount, results);

        return new JsonResult(res);
    }

About

This classes helps you to implement a .net code which render a datatable in server side, with the pagination, order and all it features.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published