15/06/2011

Paging - pager helper class c#

//định nghĩa class chia trang thường dùng

 public class Pager

    {

        public Pager(

            int totalItems,

            int currentPage = 1,

            int pageSize = 10,

            int maxPages = 10)

        {

            // calculate total pages

            var totalPages = (int)Math.Ceiling((decimal)totalItems / (decimal)pageSize);


            // ensure current page isn't out of range

            if (currentPage < 1)

            {

                currentPage = 1;

            }

            else if (currentPage > totalPages)

            {

                currentPage = totalPages;

            }


            int startPage, endPage;

            if (totalPages <= maxPages)

            {

                // total pages less than max so show all pages

                startPage = 1;

                endPage = totalPages;

            }

            else

            {

                // total pages more than max so calculate start and end pages

                var maxPagesBeforeCurrentPage = (int)Math.Floor((decimal)maxPages / (decimal)2);

                var maxPagesAfterCurrentPage = (int)Math.Ceiling((decimal)maxPages / (decimal)2) - 1;

                if (currentPage <= maxPagesBeforeCurrentPage)

                {

                    // current page near the start

                    startPage = 1;

                    endPage = maxPages;

                }

                else if (currentPage + maxPagesAfterCurrentPage >= totalPages)

                {

                    // current page near the end

                    startPage = totalPages - maxPages + 1;

                    endPage = totalPages;

                }

                else

                {

                    // current page somewhere in the middle

                    startPage = currentPage - maxPagesBeforeCurrentPage;

                    endPage = currentPage + maxPagesAfterCurrentPage;

                }

            }


            // calculate start and end item indexes

            var startIndex = (currentPage - 1) * pageSize;

            var endIndex = Math.Min(startIndex + pageSize - 1, totalItems - 1);


            // create an array of pages that can be looped over

            var pages = Enumerable.Range(startPage, (endPage + 1) - startPage);


            // update object instance with all pager properties required by the view

            TotalItems = totalItems;

            CurrentPage = currentPage;

            PageSize = pageSize;

            TotalPages = totalPages;

            StartPage = startPage;

            EndPage = endPage;

            StartIndex = startIndex;

            EndIndex = endIndex;

            Pages = pages;

        }


        public int TotalItems { get; private set; }

        public int CurrentPage { get; private set; }

        public int PageSize { get; private set; }

        public int TotalPages { get; private set; }

        public int StartPage { get; private set; }

        public int EndPage { get; private set; }

        public int StartIndex { get; private set; }

        public int EndIndex { get; private set; }

        public IEnumerable<int> Pages { get; private set; }

    }

//cách dùng trong mvc razor view

//css boostrap mặc định

    if (pager != null && pager.Pages.Any())

    {

        <nav class="table-responsive">

            <ul class="pagination justify-content-center d-flex flex-wrap">

                @if (pager.CurrentPage > 1)

                {

                    <li class="page-item">

                        <a class="page-link" href="@Url.Action("Index", "Home")">Trang đầu</a>

                    </li>

                    <li class="page-item">

                        <a class="page-link" href="@Url.Action("Index", "Home")?p=@(pager.CurrentPage - 1)">Trước</a>

                    </li>

                }


                @foreach (var p in pager.Pages)

                {

                    <li class="page-item @(p == pager.CurrentPage ? "active" : "")">

                        <a class="page-link" href="@Url.Action("Index", "Home")?p=@p">@p</a>

                    </li>

                }


                @if (pager.CurrentPage < pager.TotalPages)

                {

                    <li class="page-item">

                        <a class="page-link" href="@Url.Action("Index", "Home")?p=@(pager.CurrentPage + 1)">Tiếp</a>

                    </li>

                    <li class="page-item">

                        <a class="page-link" href="@Url.Action("Index", "Home")?p=@(pager.TotalPages)">Trang cuối</a>

                    </li>

                }

            </ul>

        </nav>

    }

02/02/2010

Dùng HtmlAgilityPack bóc tách nội dung trang web với c#

 HtmlAgilityPack là thư viện rất rất mạnh

bạn có thể bóc tách nội dung 1 trang web (1url) bất kỳ rất rất dễ nhé

Đoạn code sau làm ví dụ:
======================================

string url = "https://www.tuandev.com/2010/01/su-dung-task-trong-c.html";

HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb();

HtmlAgilityPack.HtmlDocument htmlDoc = web.Load(url);

//tới đây bạn có 1 htmlDoc hoàn chỉnh rồi

//bạn có thể lấy nội dung trong từng style class như sau

//bằng cách chọn nhiều node SelectNodes hoặc 1 node SelectSingleNode

                var title = htmlDoc.DocumentNode.SelectNodes("//h3[contains(@class, 'post-title')]");

                if(title == null)

                {

                    //do somethings

                }

else{

    //do somethings

}

[Happy coding]

25/01/2010

Sử dụng task trong c#

 Đôi khi cần load 1 loạt xử lý tương tự nhau, ví dụ map 1 danh sách object A thành danh sách B

thay vì vòng lặp tuần tự, ta có thể dùng multi task để giảm thời gian hoàn thành tiến trình như sau:

//using System.Threading.Tasks;

List<objectDTO> objectDTOs = new List<objectDTO>();

try

{

//Lấy danh sách objects từ cơ sở dữ liệu

List<object> objects = await unitOfWork.objects.Getobjects(20);

//Danh sách không có item nào, hoàn thành tiến trình

if (objects == null || !objects.Any())

{

return objectDTOs;

}

//khởi tạo danh sách task bằng với danh sách objects

Task<objectDTO>[] taskArray = new Task<objectDTO>[objects.Count];

for (int i = 0; i < objects.Count; i++)

{

object item = objects[i];

//sử dụng hàm MapObjectToDTO(item) để thực hiện tiến trình map base object to DTO object

taskArray[i] = Task.Factory.StartNew(() => MapObjectToDTO(item));

}

//chờ toàn bộ task chạy xong

Task.WaitAll();


//đưa kết quả vào danh sách trả về

for (int x = 0; x < taskArray.Length; x++)

{

if (taskArray[x].Result != null)

{

objectDTOs.Add(taskArray[x].Result);

}

}

}

catch(Exception ex)

{

//xử lý exception

}

return objectDTOs;

03/12/2009

Lắp bóng Led, thử và sai

 1 ngày đẹp trời thay bóng đèn led cho bóng huỳnh quang cũ mờ

mua cái led 1.2m mang về, tháo bóng huỳnh quang cũ ra và đè cái led mới zô

....

mở công tắc, đèn sáng .. 1 lúc chớp chớp và ngủm kèm thêm mùi khét khét

=> tèo rồi, lý do ko kiểm tra cái tăng phô 😂


Cách xử lý:

1) tháo vỏ hộp máng đèn

2) nhìn zô quả tăng phô

3) xác định dây từ nguồn vào và dây 2 đầu máng đèn nối zô tăng phô

4) căng thẳng chỗ này, cắt 2 dây mỗi 2 đầu máng ra và đấu lại với nhau
(trong hình trên là 2 sợi trắng)

5) đấu 2 đầu dây ở bước (4) vào 2 đầu dây nguồn từ công tắc vào nhau
(trong hình trên là 2 sợi đỏ)

6) kiểm tra lại các điểm đấu nối dây điện và ... mở lại công tắc .. bingo .. waahooo... đèn sáng và không khét lẹt 👌

09/11/2009

Javascript format number

 Format số nhanh trong javascript

ví dụ: 1000000 => 1,000,000

dùng pattern như sau:

    function formatNumber(num) {

        return num.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,')

    }

25/11/2008

Đăng ký tên miền, hosting, máy chủ, thiết kế lập trình website theo yêu cầu

 Chính thức trở thành đơn vị cung cấp dịch vụ đăng ký tên miền quốc tế, tên miền Việt Nam

hosting, máy chủ, cloud hosting, cloud server, email hosting, thiết kế website theo yêu cầu với tiêu chí "make your web better"

Giá dịch vụ tham khảo:
1) Tên miền .com, chỉ từ 330.000/1 năm, đã bao gồm 10 % VAT

2) Tên miền Quốc Gia VN, chỉ từ 750.000/1 năm

3) Hosting uptime 99% chỉ từ 39.000/1 tháng

....vân vân

chi tiết xem tại https://www.viettri.net.vn

07/11/2008

Mở cty

 Đăng ký thành lập cty thành công

Cả nhà ủng hộ, bạn bè tham gia góp vốn, lên luôn :)

Đăng ký tên miền, hosting, máy chủ, thiết kế lập trình website theo yêu cầu

 Chính thức trở thành đơn vị cung cấp dịch vụ đăng ký tên miền quốc tế, tên miền Việt Nam hosting, máy chủ, cloud hosting, cloud server, ema...