Index: Ienumerable Customer
Index: Ienumerable Customer
@model IEnumerable<Customer>
@{
ViewBag.Title = "Quản lý khách hàng";
}
<div class="box box-primary">
<div class="box-body">
<!--Form để nhập thông tin tìm kiếm -->
<form id="formSearch" action="~/Customer" method="get">
<div class="input-group">
<input name="searchValue"
type="text"
class="form-control"
placeholder="Nhập tên khách hàng cần tìm"
autofocus />
<div class="input-group-btn">
<button class="btn btn-info" type="submit">
<i class="fa fa-search"></i>
</button>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.CustomerName</td>
<td>@item.ContactName</td>
<td>@item.Phone</td>
<td>@item.Email</td>
<td>@item.Address</td>
<td>@item.Province</td>
<td></td>
<td class="text-right">
<a href="~/Customer/Edit/@item.CustomerID" class="btn btn-xs btn-info">
<i class="fa fa-edit"></i>
</a>
<a href="~/Customer/Delete/@item.CustomerID class="btn btn-xs btn-danger">
<i class="fa fa-remove"></i>
</a>
</td>
</tr>
}
</tbody>
</table>
<div class="text-center">
<ul class="pagination">
@for (int p = 1; p <= ViewBag.PageCount; p++)
{
if (p == ViewBag.Page)
{
<li class="active"><a href="#">@p</a></li>
}
else
{
<li><a href="~Cutomer?page=@p&[email protected]">@p</a></li>
}
}
</ul>
</div>
</div>
</div>
Customer controller
using Microsoft.AspNetCore.Mvc;
using SV21T1020398.BusinessLayers;
using System.Buffers;
namespace SV21T1020398.Wed.Controllers
{
public class CustomerController : Controller
{
const int PAGE_SIZE = 20;
int rowCount = 0;
var data = CommonDataService.ListOfCustomers(out rowCount, page, PAGE_SIZE, searchValue ?? "");
int pageCount;
pageCount = rowCount/PAGE_SIZE;
if (rowCount % PAGE_SIZE > 0)
pageCount += 1;
ViewBag.Page = page;
ViewBag.PageCount = pageCount;
ViewBag.RowCount = rowCount;
ViewBag.SearchValue = searchValue;
return View(data);
}
return View("Edit");
}
return View();
}
}
}
}
Business:
1.commonDataService
using System;
using System.Collections.Generic;
using System.ComponentModel.Design;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Azure.Core;
using SV21T1020398.BusinessLayers;
using SV21T1020398.DataLayers;
using SV21T1020398.DomainModels;
namespace SV21T1020398.BusinessLayers
{
public class CommonDataService
{
static readonly ICommonDAL<Province> provinceDB;
static readonly ICommonDAL<Customer> customerDB;
static CommonDataService()
{
provinceDB = new DataLayers.SQLServer.ProvinceDAL(Configuration.ConnectionString);
customerDB = new DataLayers.SQLServer.CustomerDAL(Configuration.ConnectionString);
}
public static List<Province> ListOfProvinces()
{
return provinceDB.List().ToList();
}
/// <summary>
/// Danh sách khách hàng,( tìm kiếm , phân trang)
/// </summary>
/// <param name="rowCount"></param>
/// <param name="page"></param>
/// <param name="pageSize"></param>
/// <param name="searchValue"></param>
/// <returns></returns>
public static List<Customer> ListOfCustomers(out int rowCount, int page = 1, int pageSize = 0, string searchValue =
"")
{
rowCount = customerDB.Count(searchValue);
return customerDB.List(page, pageSize, searchValue).ToList();
}
public static List<Customer> ListOfCustomers(string searchValue = "")
{
return customerDB.List(1, 0, searchValue).ToList();
}
}
}
2.configuration
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SV21T1020398.BusinessLayers
{
/// <summary>
/// Cấu hình cho tầng Business
/// </summary>
public static class Configuration
{
public static string ConnectionString { get; private set; } = "";
/// <summary>
/// Khởi tạo cấu hình
/// </summary>
/// <param name="connectionString"></param>
public static void Initialize(string connectionString)
{
ConnectionString = connectionString;
}
}
}
Datalayer:
1. ICommonDAL
using System.Buffers;
namespace SV21T1020398.DataLayers
{
public interface ICommonDAL<T> where T : class
{
IList<T> List(int page = 1, int pageSize = 0, string searchValues = "");
T? Get(int id);
a. _BaseDAL:
using Microsoft.Data.SqlClient;
namespace SV21T1020398.DataLayers.SQLServer
{
public abstract class _BaseDAL
{
protected string _connectionString = "";
b. customerDAL
using Dapper;
using SV21T1020398.DataLayers.SQLServer;
using SV21T1020398.DataLayers;
using SV21T1020398.DomainModels;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SV21T1020398.DataLayers.SQLServer
{
public class CustomerDAL : _BaseDAL, ICommonDAL<Customer>
{
public CustomerDAL(string connectionString) : base(connectionString)
{
}
public IList<Customer> List(int page = 1, int pagesize = 10, string searchValue = "")
{
List<Customer> data = new List<Customer>();
using (var connection = OpenConnection())
{
var sql = @"select*
from(
select *,
ROW_NUMBER()over (order by CustomerName) as RowNumber
from Customers
where CustomerName like @searchValue or ContactName like @searchValue
) as t
where @pageSize=0
or RowNumber between (@page-1) * @pageSize +1 and (@page *@pageSize)
";
var parameters = new
{
page = page,
pagesize = pagesize,
searchValue = $"%{searchValue}%"
};
data = connection.Query<Customer>(sql: sql, param: parameters, commandType:
CommandType.Text).ToList();
}
return data;
}
c. provincedal
using SV21T1020398.DomainModels;
using Dapper;
using Microsoft.Data.SqlClient;
using System.Data;
namespace SV21T1020398.DataLayers.SQLServer
{
public class ProvinceDAL : _BaseDAL, ICommonDAL<Province>
{
public ProvinceDAL(string connectionString) : base(connectionString)
{
}
Domainmolder:
namespace SV21T1020398.DomainModels
{
public class Province
{
}
}
Program
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");