1
+ using Microsoft . AspNetCore . Mvc ;
2
+ using System . ComponentModel . DataAnnotations ;
3
+ using System . Data ;
4
+ using Syncfusion . EJ2 . Base ;
5
+ using Microsoft . Data . SqlClient ;
6
+
7
+ namespace CustomAdaptor_MSSQL . Server . Controllers
8
+ {
9
+ [ ApiController ]
10
+ public class GridController : ControllerBase
11
+ {
12
+ string ConnectionString = @"<Enter a valid connection string>" ;
13
+
14
+ /// <summary>
15
+ /// Processes the DataManager request to perform searching, filtering, sorting, and paging operations.
16
+ /// </summary>
17
+ /// <param name="DataManagerRequest">Contains the details of the data operation requested.</param>
18
+ /// <returns>Returns a JSON object with the filtered, sorted, and paginated data along with the total record count.</returns>
19
+ [ HttpPost ]
20
+ [ Route ( "api/[controller]" ) ]
21
+ public object Post ( [ FromBody ] DataManagerRequest DataManagerRequest )
22
+ {
23
+ // Retrieve data from the data source (e.g., database).
24
+ IQueryable < Orders > DataSource = GetOrderData ( ) . AsQueryable ( ) ;
25
+
26
+ // Initialize QueryableOperation instance.
27
+ QueryableOperation queryableOperation = new QueryableOperation ( ) ;
28
+
29
+ // Handling searching operation.
30
+ if ( DataManagerRequest . Search != null && DataManagerRequest . Search . Count > 0 )
31
+ {
32
+ DataSource = queryableOperation . PerformSearching ( DataSource , DataManagerRequest . Search ) ;
33
+ // Add custom logic here if needed and remove above method.
34
+ }
35
+
36
+ // Handling filtering operation.
37
+ if ( DataManagerRequest . Where != null && DataManagerRequest . Where . Count > 0 )
38
+ {
39
+ foreach ( WhereFilter condition in DataManagerRequest . Where )
40
+ {
41
+ foreach ( WhereFilter predicate in condition . predicates )
42
+ {
43
+ DataSource = queryableOperation . PerformFiltering ( DataSource , DataManagerRequest . Where , predicate . Operator ) ;
44
+ // Add custom logic here if needed and remove above method.
45
+ }
46
+ }
47
+ }
48
+
49
+ // Handling sorting operation.
50
+ if ( DataManagerRequest . Sorted != null && DataManagerRequest . Sorted . Count > 0 )
51
+ {
52
+ DataSource = queryableOperation . PerformSorting ( DataSource , DataManagerRequest . Sorted ) ;
53
+ // Add custom logic here if needed and remove above method.
54
+ }
55
+
56
+ // Get the total count of records.
57
+ int totalRecordsCount = DataSource . Count ( ) ;
58
+
59
+ // Handling paging operation.
60
+ if ( DataManagerRequest . Skip != 0 )
61
+ {
62
+ DataSource = queryableOperation . PerformSkip ( DataSource , DataManagerRequest . Skip ) ;
63
+ // Add custom logic here if needed and remove above method.
64
+ }
65
+ if ( DataManagerRequest . Take != 0 )
66
+ {
67
+ DataSource = queryableOperation . PerformTake ( DataSource , DataManagerRequest . Take ) ;
68
+ // Add custom logic here if needed and remove above method.
69
+ }
70
+
71
+ // Return data based on the request.
72
+ return new { result = DataSource , count = totalRecordsCount } ;
73
+ }
74
+ /// <summary>
75
+ /// Retrieves the order data from the database.
76
+ /// </summary>
77
+ /// <returns>Returns a list of orders fetched from the database.</returns>
78
+ [ HttpGet ]
79
+ [ Route ( "api/[controller]" ) ]
80
+ public List < Orders > GetOrderData ( )
81
+ {
82
+ string queryStr = "SELECT * FROM dbo.Orders ORDER BY OrderID;" ;
83
+ SqlConnection sqlConnection = new ( ConnectionString ) ;
84
+ sqlConnection . Open ( ) ;
85
+ SqlCommand sqlCommand = new ( queryStr , sqlConnection ) ;
86
+ SqlDataAdapter DataAdapter = new ( sqlCommand ) ;
87
+ DataTable DataTable = new ( ) ;
88
+ DataAdapter . Fill ( DataTable ) ;
89
+ sqlConnection . Close ( ) ;
90
+
91
+ // Map data to a list.
92
+ List < Orders > dataSource = ( from DataRow Data in DataTable . Rows
93
+ select new Orders ( )
94
+ {
95
+ OrderID = Convert . ToInt32 ( Data [ "OrderID" ] ) ,
96
+ CustomerID = Data [ "CustomerID" ] . ToString ( ) ,
97
+ EmployeeID = Convert . IsDBNull ( Data [ "EmployeeID" ] ) ? 0 : Convert . ToUInt16 ( Data [ "EmployeeID" ] ) ,
98
+ ShipCity = Data [ "ShipCity" ] . ToString ( ) ,
99
+ Freight = Convert . ToDecimal ( Data [ "Freight" ] )
100
+ }
101
+ ) . ToList ( ) ;
102
+ return dataSource ;
103
+ }
104
+
105
+ /// <summary>
106
+ /// Inserts a new data item into the data collection.
107
+ /// </summary>
108
+ /// <param name="value">It contains the new record detail which is need to be inserted.</param>
109
+ /// <returns>Returns void.</returns>
110
+ [ HttpPost ]
111
+ [ Route ( "api/[controller]/Insert" ) ]
112
+ public void Insert ( [ FromBody ] CRUDModel < Orders > value )
113
+ {
114
+ //Create query to insert the specific into the database by accessing its properties.
115
+ string queryStr = $ "Insert into Orders(CustomerID,Freight,ShipCity,EmployeeID) values('{ value . value . CustomerID } ','{ value . value . Freight } ','{ value . value . ShipCity } ','{ value . value . EmployeeID } ')";
116
+ SqlConnection SqlConnection = new SqlConnection ( ConnectionString ) ;
117
+ SqlConnection . Open ( ) ;
118
+
119
+ // Execute the SQL command.
120
+ SqlCommand SqlCommand = new SqlCommand ( queryStr , SqlConnection ) ;
121
+
122
+ // Execute this code to reflect the changes into the database.
123
+ SqlCommand . ExecuteNonQuery ( ) ;
124
+ SqlConnection . Close ( ) ;
125
+
126
+ // Add custom logic here if needed and remove above method.
127
+ }
128
+
129
+ /// <summary>
130
+ /// Update a existing data item from the data collection.
131
+ /// </summary>
132
+ /// <param name="value">It contains the updated record detail which is need to be updated.</param>
133
+ /// <returns>Returns void.</returns>
134
+ [ HttpPost ]
135
+ [ Route ( "api/[controller]/Update" ) ]
136
+ public void Update ( [ FromBody ] CRUDModel < Orders > value )
137
+ {
138
+ // Create query to update the changes into the database by accessing its properties.
139
+ string queryStr = $ "Update Orders set CustomerID='{ value . value . CustomerID } ', Freight='{ value . value . Freight } ',EmployeeID='{ value . value . EmployeeID } ',ShipCity='{ value . value . ShipCity } ' where OrderID='{ value . value . OrderID } '";
140
+ SqlConnection SqlConnection = new SqlConnection ( ConnectionString ) ;
141
+ SqlConnection . Open ( ) ;
142
+
143
+ // Execute the SQL command.
144
+ SqlCommand SqlCommand = new SqlCommand ( queryStr , SqlConnection ) ;
145
+
146
+ // Execute this code to reflect the changes into the database.
147
+ SqlCommand . ExecuteNonQuery ( ) ;
148
+ SqlConnection . Close ( ) ;
149
+
150
+ //Add custom logic here if needed and remove above method.
151
+ }
152
+
153
+ /// <summary>
154
+ /// Remove a specific data item from the data collection.
155
+ /// </summary>
156
+ /// <param name="value">It contains the specific record detail which is need to be removed.</param>
157
+ /// <return>Returns void.</return>
158
+ [ HttpPost ]
159
+ [ Route ( "api/[controller]/Remove" ) ]
160
+ public void Remove ( [ FromBody ] CRUDModel < Orders > value )
161
+ {
162
+ // Create query to remove the specific from database by passing the primary key column value.
163
+ string queryStr = $ "Delete from Orders where OrderID={ value . key } ";
164
+ SqlConnection SqlConnection = new SqlConnection ( ConnectionString ) ;
165
+ SqlConnection . Open ( ) ;
166
+
167
+ // Execute the SQL command.
168
+ SqlCommand SqlCommand = new SqlCommand ( queryStr , SqlConnection ) ;
169
+
170
+ // Execute this code to reflect the changes into the database.
171
+ SqlCommand . ExecuteNonQuery ( ) ;
172
+ SqlConnection . Close ( ) ;
173
+
174
+ // Add custom logic here if needed and remove above method.
175
+ }
176
+
177
+ /// <summary>
178
+ /// Batch update (Insert, Update, and Delete) a collection of data items from the data collection.
179
+ /// </summary>
180
+ /// <param name="CRUDModel<T>">The set of information along with details about the CRUD actions to be executed from the database.</param>
181
+ /// <returns>Returns void.</returns>
182
+ [ HttpPost ]
183
+ [ Route ( "api/[controller]/BatchUpdate" ) ]
184
+ public IActionResult BatchUpdate ( [ FromBody ] CRUDModel < Orders > value )
185
+ {
186
+ if ( value . changed != null && value . changed . Count > 0 )
187
+ {
188
+ foreach ( Orders Record in ( IEnumerable < Orders > ) value . changed )
189
+ {
190
+ // Create query to update the changes into the database by accessing its properties.
191
+ string queryStr = $ "Update Orders set CustomerID='{ Record . CustomerID } ', Freight='{ Record . Freight } ',EmployeeID='{ Record . EmployeeID } ',ShipCity='{ Record . ShipCity } ' where OrderID='{ Record . OrderID } '";
192
+ SqlConnection SqlConnection = new SqlConnection ( ConnectionString ) ;
193
+ SqlConnection . Open ( ) ;
194
+
195
+ // Execute the SQL command.
196
+ SqlCommand SqlCommand = new SqlCommand ( queryStr , SqlConnection ) ;
197
+
198
+ // Execute this code to reflect the changes into the database.
199
+ SqlCommand . ExecuteNonQuery ( ) ;
200
+ SqlConnection . Close ( ) ;
201
+
202
+ // Add custom logic here if needed and remove above method.
203
+ }
204
+ }
205
+ if ( value . added != null && value . added . Count > 0 )
206
+ {
207
+ foreach ( Orders Record in ( IEnumerable < Orders > ) value . added )
208
+ {
209
+ // Create query to insert the specific into the database by accessing its properties.
210
+ string queryStr = $ "Insert into Orders(CustomerID,Freight,ShipCity,EmployeeID) values('{ Record . CustomerID } ','{ Record . Freight } ','{ Record . ShipCity } ','{ Record . EmployeeID } ')";
211
+ SqlConnection SqlConnection = new SqlConnection ( ConnectionString ) ;
212
+ SqlConnection . Open ( ) ;
213
+
214
+ // Execute the SQL command.
215
+ SqlCommand SqlCommand = new SqlCommand ( queryStr , SqlConnection ) ;
216
+
217
+ // Execute this code to reflect the changes into the database.
218
+ SqlCommand . ExecuteNonQuery ( ) ;
219
+ SqlConnection . Close ( ) ;
220
+
221
+ // Add custom logic here if needed and remove above method.
222
+ }
223
+ }
224
+ if ( value . deleted != null && value . deleted . Count > 0 )
225
+ {
226
+ foreach ( Orders Record in ( IEnumerable < Orders > ) value . deleted )
227
+ {
228
+ // Create query to remove the specific from database by passing the primary key column value.
229
+ string queryStr = $ "Delete from Orders where OrderID={ Record . OrderID } ";
230
+ SqlConnection SqlConnection = new SqlConnection ( ConnectionString ) ;
231
+ SqlConnection . Open ( ) ;
232
+
233
+ // Execute the SQL command.
234
+ SqlCommand SqlCommand = new SqlCommand ( queryStr , SqlConnection ) ;
235
+
236
+ // Execute this code to reflect the changes into the database.
237
+ SqlCommand . ExecuteNonQuery ( ) ;
238
+ SqlConnection . Close ( ) ;
239
+
240
+ // Add custom logic here if needed and remove above method.
241
+ }
242
+ }
243
+ return new JsonResult ( value ) ;
244
+ }
245
+ public class CRUDModel < T > where T : class
246
+ {
247
+ public string ? action { get ; set ; }
248
+ public string ? keyColumn { get ; set ; }
249
+ public object ? key { get ; set ; }
250
+ public T ? value { get ; set ; }
251
+ public List < T > ? added { get ; set ; }
252
+ public List < T > ? changed { get ; set ; }
253
+ public List < T > ? deleted { get ; set ; }
254
+ public IDictionary < string , object > ? @params { get ; set ; }
255
+ }
256
+ public class Orders
257
+ {
258
+ [ Key ]
259
+ public int ? OrderID { get ; set ; }
260
+ public string ? CustomerID { get ; set ; }
261
+ public int ? EmployeeID { get ; set ; }
262
+ public decimal ? Freight { get ; set ; }
263
+ public string ? ShipCity { get ; set ; }
264
+ }
265
+ }
266
+ }
0 commit comments