11using jQueryDatatableServerSideNetCore . Data ;
2+ using jQueryDatatableServerSideNetCore . Extensions ;
23using jQueryDatatableServerSideNetCore . Models . AuxiliaryModels ;
4+ using jQueryDatatableServerSideNetCore . Models . DatabaseModels ;
5+ using jQueryDatatableServerSideNetCore . Services ;
36using Microsoft . AspNetCore . Mvc ;
7+ using Microsoft . EntityFrameworkCore ;
8+ using Newtonsoft . Json ;
9+ using RandomGen ;
410using System ;
511using System . Linq ;
612using System . Threading . Tasks ;
7- using jQueryDatatableServerSideNetCore . Extensions ;
8- using jQueryDatatableServerSideNetCore . Models . DatabaseModels ;
9- using Microsoft . EntityFrameworkCore ;
10- using RandomGen ;
1113
1214namespace jQueryDatatableServerSideNetCore . Controllers
1315{
1416 public class TestRegistersController : Controller
1517 {
1618 private readonly ApplicationDbContext _context ;
19+ private readonly IExportService _exportService ;
1720
18- public TestRegistersController ( ApplicationDbContext context )
21+ public TestRegistersController ( ApplicationDbContext context , IExportService exportService )
1922 {
2023 _context = context ;
24+ _exportService = exportService ;
2125 }
2226
2327 // GET: TestRegisters
@@ -29,7 +33,7 @@ public async Task<IActionResult> Index()
2933 }
3034
3135 [ HttpPost ]
32- public async Task < IActionResult > LoadTable ( [ FromBody ] DtParameters dtParameters )
36+ public async Task < IActionResult > LoadTable ( [ FromBody ] DtParameters dtParameters )
3337 {
3438 var searchBy = dtParameters . Search ? . Value ;
3539
@@ -76,6 +80,64 @@ public async Task<IActionResult> LoadTable([FromBody]DtParameters dtParameters)
7680 } ) ;
7781 }
7882
83+ [ HttpPost ]
84+ public async Task < IActionResult > ExportTable ( [ FromQuery ] string format )
85+ {
86+ var rawDtParametersData = HttpContext . Request . Form [ "dtParameters" ] ;
87+
88+ var dtParameters = new DtParameters ( ) ;
89+ if ( ! string . IsNullOrEmpty ( rawDtParametersData ) )
90+ {
91+ dtParameters = JsonConvert . DeserializeObject < DtParameters > ( rawDtParametersData ) ;
92+ }
93+
94+ var searchBy = dtParameters . Search ? . Value ;
95+
96+ // if we have an empty search then just order the results by Id ascending
97+ var orderCriteria = "Id" ;
98+ var orderAscendingDirection = true ;
99+
100+ if ( dtParameters . Order != null )
101+ {
102+ // in this example we just default sort on the 1st column
103+ orderCriteria = dtParameters . Columns [ dtParameters . Order [ 0 ] . Column ] . Data ;
104+ orderAscendingDirection = dtParameters . Order [ 0 ] . Dir . ToString ( ) . ToLower ( ) == "asc" ;
105+ }
106+
107+ var result = _context . TestRegisters . AsQueryable ( ) ;
108+
109+ if ( ! string . IsNullOrEmpty ( searchBy ) )
110+ {
111+ result = result . Where ( r => r . Name != null && r . Name . ToUpper ( ) . Contains ( searchBy . ToUpper ( ) ) ||
112+ r . FirstSurname != null && r . FirstSurname . ToUpper ( ) . Contains ( searchBy . ToUpper ( ) ) ||
113+ r . SecondSurname != null && r . SecondSurname . ToUpper ( ) . Contains ( searchBy . ToUpper ( ) ) ||
114+ r . Street != null && r . Street . ToUpper ( ) . Contains ( searchBy . ToUpper ( ) ) ||
115+ r . Phone != null && r . Phone . ToUpper ( ) . Contains ( searchBy . ToUpper ( ) ) ||
116+ r . ZipCode != null && r . ZipCode . ToUpper ( ) . Contains ( searchBy . ToUpper ( ) ) ||
117+ r . Country != null && r . Country . ToUpper ( ) . Contains ( searchBy . ToUpper ( ) ) ||
118+ r . Notes != null && r . Notes . ToUpper ( ) . Contains ( searchBy . ToUpper ( ) ) ) ;
119+ }
120+
121+ result = orderAscendingDirection ? result . OrderByDynamic ( orderCriteria , DtOrderDir . Asc ) : result . OrderByDynamic ( orderCriteria , DtOrderDir . Desc ) ;
122+
123+ var resultList = await result . ToListAsync ( ) ;
124+
125+ byte [ ] dataByteArray ;
126+
127+ switch ( format )
128+ {
129+ case ExportFormat . Excel :
130+ dataByteArray = await _exportService . ExportToExcel ( resultList ) ;
131+
132+ return File (
133+ dataByteArray ,
134+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ,
135+ "data.xlsx" ) ;
136+ }
137+
138+ return null ;
139+ }
140+
79141 public async Task SeedData ( )
80142 {
81143 if ( ! _context . TestRegisters . Any ( ) )
0 commit comments