Phân trang nội dung bằng C#
Posted: 13/5/2010.
Nếu là 1 người lập trình web, chắc hẳn bạn không lạ gì việc phân trang, nhưng bạn đã bao giờ nghĩ là phải phân trang cho nội dung của một bài chưa? Đôi khi việc đó là việc cần thiết! Ví dụ một bài của chúng ta quá dài, cách tốt nhất là chúng ta hãy phân ra thành nhiều trang để load cho nhẹ.
Nếu là 1 người lập trình web, chắc hẳn bạn không lạ gì việc phân trang, nhưng bạn đã bao giờ nghĩ là phải phân trang cho nội dung của một bài chưa? Đôi khi việc đó là việc cần thiết! Ví dụ một bài của chúng ta quá dài, cách tốt nhất là chúng ta hãy phân ra thành nhiều trang để load cho nhẹ.
Về giải pháp chắc là cũng có nhiều giải pháp, ở đây xin giới thiệu 2 cách:
- Cách thứ nhất là tạo 1 bảng trang liên kết với bảng bài, bây giờ thay vì việc lưu nội dung ở bảng bài như trước kia, chúng ta sẽ chia nhỏ ra các đoạn rồi lưu vào bảng trang, trên bảng trang để ID của bảng bài, vậy khi select ra bài ta chỉ việc select ra từ bảng trang where với ID của bài đó là xong.
- Cách thứ 2 thì đơn giản hơn và không phải thay đổi database, đó là viết 1 hàm có nhiệm vụ là đưa nội dung vào, sẽ xuất ra các trang theo tiêu chí của mình, ví dụ như mỗi trang không quá 1000 kí tự, hoặc là cứ đến thẻ <br /> là cắt sang trang mới!
Lưu ý: ở đây, phần nội dung không phải là text thuần mà là mã html, nên khi cắt, nếu không tách các cặp thẻ sẽ làm mất đi định dạng của nội dung dẫn đến vỡ cấu trúc trang khi hiển thị.
Sau đây tôi sẽ trình bày hàm cắt chuỗi ra thành các trang nhỏ và lưu và 1 ArrayList, 1 phần tử trong ArrayList là 1 trang và yêu cầu là khi cắt mỗi trang không vượt quá _lenght kí tự, và không làm mất các cặp thẻ đã được đặt sẵn trong 1 danh sách.
- public static DataTable declaration()
- {
- DataTable table = new DataTable();
- table.Columns.Add("open");
- table.Columns.Add("close");
- table.Rows.Add(new object[] { "<div", "</div>" });
- table.Rows.Add(new object[] { "<span", "</span>" });
- table.Rows.Add(new object[] { "<table", "</table>" });
- table.Rows.Add(new object[] { "<tr", "</tr>" });
- table.Rows.Add(new object[] { "<td", "</td>" });
- table.Rows.Add(new object[] { "<b", "</b>" });
- table.Rows.Add(new object[] { "<img", "/>" });
- table.Rows.Add(new object[] { "<p", "</p>" });
- table.Rows.Add(new object[] { "style=\"", "\"" });
- return table;
- }
- public static DataTable BindStringToDataTabe(string _strInput, int _lenght)
- {
- DataTable table = new DataTable();
- table.Columns.Add("values");
- int a = 0, b = _lenght;
- if (_strInput.Length > _lenght)
- {
- while (b < _strInput.Length)
- {
- string temp = _strInput.Substring(a, _lenght);
- for (int i = 0; i < declaration().Rows.Count; i++)
- {
- if (temp.Contains(declaration().Rows<img src="http://www.nghean-aptech.com/emoticons/emotion-55.gif" alt="Idea" />[0].ToString()))
- {
- if (!temp.Contains(declaration().Rows<img src="http://www.nghean-aptech.com/emoticons/emotion-55.gif" alt="Idea" />[1].ToString()))
- {
- temp = temp.Substring(0, temp.LastIndexOf(declaration().Rows<img src="http://www.nghean-aptech.com/emoticons/emotion-55.gif" alt="Idea" />[0].ToString()));
- }
- }
- }
- temp = temp.Substring(0, temp.LastIndexOf(" "));
- table.Rows.Add(new object[] { temp });
- a += temp.Length;
- b = a + _lenght;
- if (b >= _strInput.Length)
- {
- table.Rows.Add(new object[] { _strInput.Substring(a, _strInput.Length - a) });
- }
- }
- }
- else
- {
- table.Rows.Add(new object[] { _strInput });
- }
- return table;
- }
-
Chúc các bạn thành công
[Nghean-Aptech st]
Các tin mới:
Hướng dẫn tích hợp giao diện trang quản trị SB Admin 2 vào Laravel 5.8.
Hướng dẫn tích hợp Google ReCaptcha v2 vào Laravel bằng curl.
Học lập trình React JS trong vòng 5 phút.
Sử dụng trình soạn thảo CKeditor tích hợp CKFinder với Laravel.
Hướng dẫn cài đặt Apache, PHP, MySQL, PHPMyAdmin trên Windows 10 và cấu hình SendMail.
Các tin cũ hơn:
Phân trang dữ liệu trong SQL server.
Tạo sitemap với dữ liệu từ database.
Giảm kích thước file CSS với .NET.
Sao lưu tất cả database của SQL Server.
10 lý do bạn chọn MySQL.