Sunday, October 22, 2017

Hiển thị cấu trúc của một tài liệu XML trong TreeView C#

Một trong những khía cạnh đáng chú ý nhất của Microsoft .NET Framework là sự tích hợp sâu sắc với XML. Trong nhiều ứng dụng .NET, bạn sẽ không nhận thấy rằng mình đang sử dụng các kỹ thuật XML—chúng sẽ được sử dụng phía hậu trường khi bạn tuần tự hóa một Microsoft ADO.NET DataSet, gọi một dịch vụ Web XML, hoặc đọc các thiết lập ứng dụng trong một file cấu hình Web.config. Trong các trường hợp khác, bạn sẽ muốn làm việc trực tiếp với không gian tên System.Xml để thao tác dữ liệu XML. Các tác vụ XML thông thường không chỉ phân tích một file XML mà còn xác nhận tính hợp lệ của nó dựa trên một XML Schema, áp dụng phép biến đổi XSL để tạo một tài liệu hay trang HTML mới, và tìm kiếm một cách thông minh với XPath.

Và để bắt đầu làm việc với XML, mình sẽ hướng dẫn các bạn hiển thị cấu trúc và nội dung của một tài liệu XML.
Giải pháp: Nạp tài liệu XML bằng lớp System.Xml.XmlDocument. Sau đó, viết một phương thức để chuyển một XmlNode thành một System.Windows.Forms.TreeNode, rồi gọi nó một cách đệ quy để duyệt qua toàn bộ tài liệu.
.NET Framework cung cấp nhiều cách khác nhau để xử lý các tài liệu XML. Cách mà bạn sử dụng tùy thuộc vào tác vụ cần lập trình. Một trong số đó là lớp XmlDocument. Lớp này cung cấp một dạng biểu diễn trong-bộ-nhớ cho một tài liệu XML, tuân theo W3C Document Object Model (DOM); cho phép bạn duyệt qua các nút theo bất kỳ hướng nào, chèn và loại bỏ nút, và thay đổi động cấu trúc lúc chạy. Bạn hãy vào [http://www.w3c.org] để biết thêm chi tiết về DOM.

Để sử dụng lớp XmlDocument, bạn chỉ việc tạo một thể hiện của lớp này rồi gọi phương thức Load cùng với một tên file, một Stream, một TextReader, hay một XmlReader (bạn cũng có thể cung cấp một URL chỉ đến một tài liệu XML). Thể hiện XmlDocument sẽ chứa tất cả các nút (dạng cây) có trong tài liệu nguồn. Điểm nhập (entry point) dùng để truy xuất các nút này là phần tử gốc, được cấp thông qua thuộc tính XmlDocument.DocumentElement. Đây là một đối tượng XmlElement, có thể chứa nhiều đối tượng XmlNode lồng bên trong, các đối tượng này có thể chứa nhiều đối tượng XmlNode nữa, và cứ tiếp tục như thế. Một XmlNode là phần cấu thành cơ bản của một file XML. Một nút XML có thể là một phần tử (element), một đặc tính (attribute), lời chú thích, hay text.

Khi làm việc với XmlNode hay một lớp dẫn xuất từ đó (như XmlElement hay XmlAttribute),
bạn có thể sử dụng các thuộc tính cơ bản sau đây:
· ChildNodes là tập hợp các nút lồng bên trong ở mức đầu tiên.
· Name là tên của nút.
· NodeType là một thành viên thuộc kiểu liệt kê System.Xml.XmlNodeType, cho biết kiểu của nút (phần tử, đặc tính, text...).
· Value là nội dung của nút, nếu đó là nút text hay nút CDATA.
· Attributes là tập hợp các nút mô tả các đặc tính được áp dụng cho phần tử.
· InnerText là chuỗi chứa giá trị (text) của nút hiện hành và tất cả các nút lồng bên trong.
· InnerXml là chuỗi chứa thẻ đánh dấu XML cho tất cả các nút lồng bên trong.
· OuterXml là chuỗi chứa thẻ đánh dấu XML cho nút hiện hành và tất cả các nút lồng bên trong.

Ví dụ dưới đây duyệt qua tất cả các nút của một XmlDocument (bằng thuộc tính ChildNodes và một phương thức đệ quy) rồi hiển thị chúng trong một TreeView.



Xét file XML dưới đây (ProductCatalog.xml):





Hy vọng bài viết sẽ giúp các bạn hiểu rõ hơn về cách làm việc với file hay thư mục trong C#
Để hiểu rõ hơn, các bạn có thể vào đọc ebook ở địa chỉ sau:
http://www.hoang.name.vn/2015/12/giao-trinh-cshap-7-bo-ebook-cshap-tieng-viet.html

Hiển thị các hộp thoại file trong C#

Bạn cần hiện các hộp thoại Windows chuẩn để mở, lưu file, và để chọn thư mục.
Giải pháp: Sử dụng các lớp OpenFileDialog, SaveFileDialog, và FolderBrowserDialog thuộc không gian tên System.Windows.Forms. Gọi phương thức ShowDialog để hiển thị hộp thoại, xét giá trị trả về để xác định người dùng đã nhấn OK hay Cancel, và lấy thông tin từ thuộc tính FileName hay SelectedPath.
.NET cung cấp các đối tượng bọc lấy nhiều hộp thoại Windows chuẩn, bao gồm các hộp thoại dùng để mở và lưu file, và để chọn thư mục. Tất cả các lớp này đều thừa kế từ System.Windows.Forms.CommonDialog, bao gồm:

- OpenFileDialog—cho phép người dùng chọn một file. Tên file và đường dẫn có thể được lấy từ thuộc tính FileName (hay tập hợp FileNames, nếu bạn cho phép chọn nhiều file bằng cách thiết lập Multiselect là true). Ngoài ra, bạn có thể sử dụng thuộc tính Filter để chọn định dạng file và thiết lập thuộc tính CheckFileExists để kiểm tra tính hợp lệ
OpenFileDialog
- SaveFileDialog—cho phép người dùng chỉ định một file mới. Tên file và đường dẫn có thể được lấy từ thuộc tính FileName. Bạn có thể sử dụng thuộc tính Filter để chọn định dạng file và thiết lập các thuộc tính CreatePrompt và OverwritePrompt để hiển thị thông báo xác nhận khi người dùng chọn một file mới hay file đã tồn tại.
- FolderBrowserDialog—cho phép người dùng chọn (và tạo) một thư mục. Đường dẫn đã chọn có thể được lấy từ thuộc tính SelectedPath. Ngoài ra, bạn có thể thiết lập thuộc tính ShowNewFolderButton để hiển thị nút Make New Folder

FolderBrowserDialog
Khi sử dụng OpenFileDialog hay SaveFileDialog, bạn cần thiết lập chuỗi lọc (chỉ định các phần mở rộng được phép). Chuỗi lọc được phân cách bởi ký tự "|" theo định dạng: "[Nhãn] | [Danh sách các phần mở rộng được phân cách bởi dấu chấm phẩy] | [Nhãn] | [Danh sách các phần mở rộng được phân cách bởi dấu chấm phẩy] | ...". Bạn cũng có thể thiết lập thuộc tính Title (tiêu đề) và InitialDirectory (thư mục ban đầu).

Ứng dụng dưới đây cho phép người dùng nạp tài liệu vào một RichTextBox, sửa nội dung, và lưu tài liệu đã được sửa (sử dụng lớp OpenFileDialog và SaveFileDialog để mở và lưu tài liệu).




Hy vọng bài viết sẽ giúp các bạn hiểu rõ hơn về cách làm việc với file hay thư mục trong C#
Để hiểu rõ hơn, các bạn có thể vào đọc ebook ở địa chỉ sau:
http://www.hoang.name.vn/2015/12/giao-trinh-cshap-7-bo-ebook-cshap-tieng-viet.html

Đọc và ghi file văn bản trong C#

Hôm nay mình sẽ hướng dẫn các bạn ghi dữ liệu vào một file văn bản theo kiểu mã hóa ASCII, Unicode, hay UTF-8 bằng ngôn ngữ C#.
Giải pháp: Tạo một đối tượng System.IO.FileStream tham chiếu đến file. Để ghi file, hãy gói FileStream trong một System.IO.StreamWriter và sử dụng phương thức nạp chồng Write. Để đọc file, hãy gói FileStream trong một System.IO.StreamReader và sử dụng phương thức Read hay ReadLine.

.NET cho phép bạn ghi hay đọc văn bản bằng lớp StreamWriter và StreamReader. Khi ghi dữ liệu với StreamWriter, hãy sử dụng phương thức StreamWriter.Write. Phương thức này được nạp chồng để hỗ trợ tất cả các kiểu dữ liệu thông thường trong C# .NET, bao gồm chuỗi, ký tự, số nguyên, số thực dấu chấm động, số thập phân,... Tuy nhiên, phương thức Write luôn chuyển dữ liệu thành văn bản. Nếu muốn chuyển văn bản này trở về kiểu ban đầu thì bạn nên sử dụng WriteLine để bảo đảm mỗi giá trị được đặt trên một dòng riêng. Có nhiều cách mô tả một chuỗi dưới dạng nhị phân, tùy thuộc vào cách mã hóa. Các kiểu mã hóa thông thường là:

  • ASCII—sử dụng 7 bit để mã hóa mỗi ký tự trong chuỗi. Dữ liệu được mã hóa theo ASCII không thể chứa các ký tự Unicode mở rộng. Khi sử dụng kiểu mã hóa ASCII trong .NET, các bit được đệm thêm để mảng byte kết quả sẽ có 1 byte cho mỗi ký tự.
  • Full Unicode, hay UTF-16—sử dụng 16 bit để mã hóa mỗi ký tự trong chuỗi, nên mảng byte kết quả sẽ có 2 byte cho mỗi ký tự.
  • UTF-7 Unicode—sử dụng 7 bit cho các ký tự ASCII bình thường và nhiều cặp 7 bit cho các ký tự mở rộng. Kiểu mã hóa này chủ yếu dùng cho các giao thức 7 bit, chẳng hạn mail.
  • UTF-8 Unicode—sử dụng 8 bit cho các ký tự ASCII bình thường và nhiều cặp 8 bit cho các ký tự mở rộng. Mảng byte kết quả sẽ có 1 byte cho mỗi ký tự (giả sử không có ký tự mở rộng).

.NET cung cấp một lớp cho mỗi kiểu mã hóa trong không gian tên System.Text. Khi sử dụng StreamReader và StreamWriter, bạn có thể chỉ định kiểu mã hóa hoặc sử dụng kiểu mặc định là 
UTF-8.
Khi đọc thông tin, sử dụng phương thức Read hay ReadLine của lớp StreamReader. Phương thức Read đọc một ký tự, hay số ký tự do bạn chỉ định, và trả về một ký tự hay mảng ký tự. Phương thức ReadLine trả về một chuỗi chứa toàn bộ nội dung một hàng.
Ứng dụng Console dưới đây minh họa việc ghi và đọc một file văn bản:



Hy vọng bài viết sẽ giúp các bạn hiểu rõ hơn về cách làm việc với file hay thư mục trong C#
Để hiểu rõ hơn, các bạn có thể vào đọc ebook ở địa chỉ sau:
http://www.hoang.name.vn/2015/12/giao-trinh-cshap-7-bo-ebook-cshap-tieng-viet.html

Friday, October 20, 2017

Sử dụng TreeView để hiển thị cây thư mục just-in-time trong C# Win Form

Bạn cần hiển thị một cây thư mục trong TreeView. Tuy nhiên, việc lấp đầy cấu trúc cây thư mục khi khởi động tốn quá nhiều thời gian.
Giải pháp: Thêm cấp thư mục đầu tiên vào TreeView, và thêm một nút giả (ẩn) vào mỗi nhánh. Phản ứng lại sự kiện TreeView.BeforeExpand để thêm các thư mục con vào một nhánh trước khi nó được hiển thị.
Bạn có thể sử dụng kỹ thuật đệ quy để xây dựng toàn bộ cây thư mục. Tuy nhiên, việc quét hệ thống file theo cách này có thể chậm, đặc biệt đối với các ổ đĩa lớn. Vì lý do này, các phần mềm quản lý file chuyên nghiệp (bao gồm Windows Explorer) sử dụng một kỹ thuật khác: chỉ hiển thị những thông tin nào người dùng cần đến.
TreeView rất thích hợp với cách tiếp cận này vì nó cung cấp sự kiện BeforeExpand (sự kiện này phát sinh trước khi một cấp mới được hiển thị). Bạn có thể sử dụng một placeholder (như dấu hoa thị hay nút rỗng) trong tất cả các nhánh chưa được thêm vào. Điều này cho phép bạn thêm vào các phần của cây thư mục khi chúng được hiển thị.
Để sử dụng kiểu giải pháp này, bạn cần ba yếu tố sau:
· Phương thức Fill—thêm một cấp mới vào một thư mục. Bạn sẽ sử dụng phương thức này để thêm vào các cấp khi chúng được mở rộng.
· Phương thức thụ lý sự kiện Form.Load—sử dụng Fill để tạo cây với cấp đầu tiên.
· Phương thức thụ lý sự kiện TreeView.BeforeExpand—phản ứng khi người dùng mở rộng một nút và gọi Fill nếu thông tin của thư mục này chưa được thêm.

Dưới đây là phần mã cho form:

Một cây thư mục với TreeView

Hy vọng bài viết sẽ giúp các bạn hiểu rõ hơn về cách làm việc với file hay thư mục trong C#
Để hiểu rõ hơn, các bạn có thể vào đọc ebook ở địa chỉ sau:
http://www.hoang.name.vn/2015/12/giao-trinh-cshap-7-bo-ebook-cshap-tieng-viet.html

Chép, chuyển, xóa file hay thư mục trong C#

Khi xây dựng một ứng dụng C#, có thể bạn gặp trường hợp cần chép, chuyển, xóa một file hay thư mục. Bài viết này sẽ gợi ý cho bạn phải giải quyết như thế nào.
Giải pháp của chúng ta là: Tạo đối tượng System.IO.FileInfo cho file hay đối tượng System.IO.DirectoryInfo cho thư mục, truyền đường dẫn cho phương thức khởi dựng. Sử dụng các phương thức của đối tượng để chép, chuyển, xóa.
Các lớp FileInfo và DirectoryInfo cung cấp nhiều phương thức dùng để thao tác trên file và thư mục.  2 bảng sẽ trình bày các phương thức của lớp FileInfo và DirectoryInfo.

Các phương thức dùng để thao tác đối tượng FileInfo
Phương thứcMô tả
CopyToChép một file sang đường dẫn mới, tên file được chỉ định trong đối số. Nó cũng trả về một đối tượng FileInfo mô tả file mới được chép. Bạn có thể truyền thêm một thông số tùy chọn có giá trị true để cho phép chép đè.
Create và CreateTextCreate tạo file được chỉ định và trả về một đối tượng FileStream dùng để ghi ra file. CreateText cũng thực hiện như thế, nhưng trả về đối tượng StreamWriter gói lấy stream.
Open, OpenRead, OpenText, và OpenWriteMở một file (nếu nó tồn tại). OpenRead và OpenText mở file trong chế độ chỉ-đọc, trả về một đối tượng FileStream hay StreamReader. OpenWrite mở file trong chế độ chỉ-ghi, trả về một đối tượng FileStream.
DeleteXóa file (nếu nó tồn tại).
MoveToChuyển một file đến đường dẫn mới, tên file được chỉ định trong đối số. MoveTo cũng được sử dụng để đổi tên một file mà không chuyển chỗ.

Các phương thức dùng để thao tác đối tượng DirectoryInfo
Phương thứcMô tả
CreateTạo thư mục được chỉ định. Nếu đường dẫn chỉ định nhiều thư mục chưa tồn tại, tất cả sẽ được tạo một lượt.
CreateSubdirectoryTạo một thư mục với tên cụ thể bên trong thư mục được mô tả bởi đối tượng DirectoryInfo. Nó cũng trả về một đối tượng DirectoryInfo mô tả thư mục con.
DeleteXóa một thư mục (nếu nó tồn tại). Nếu muốn xóa một thư mục có chứa các thư mục khác, bạn phải sử dụng phương thức nạp chồng Delete chấp nhận một thông số có tên là recursive và thiết lập nó là true.
MoveToChuyển một thư mục đến đường dẫn mới. MoveTo có thể được sử dụng để đổi tên một thư mục mà không chuyển chỗ.

Lớp DirectoryInfo không có phương thức nào dùng để sao chép thư mục. Tuy nhiên, bạn có thể dễ dàng viết được một phương thức như thế dựa trên kỹ thuật đệ quy và phương thức CopyTo của đối tượng FileInfo:


Ví dụ sau sử dụng phương thức vừa viết ở trên để chép thư mục, đường dẫn các thư mục được
truyền qua dòng lệnh:



Hy vọng bài viết sẽ giúp các bạn hiểu rõ hơn về cách làm việc với file hay thư mục trong C#
Để hiểu rõ hơn, các bạn có thể vào đọc ebook ở địa chỉ sau:
http://www.hoang.name.vn/2015/12/giao-trinh-cshap-7-bo-ebook-cshap-tieng-viet.html

Thiết lập các thuộc tính của file và thư mục trong C#

Nếu một ngày nọ, ứng dụng C# của bạn cần kiểm tra hay thay đổi các thuộc tính của file hay thư mục.
Giải pháp ở đây là bạn cần ạo đối tượng System.IO.FileInfo cho file hay tạo đối tượng System.IO.DirectoryInfo cho thư mục. Sau đó, sử dụng các toán tử AND (&) và OR (|) để thay đổi giá trị của thuộc tính Attributes.
Các thuộc tính FileInfo.Attributes và DirectoryInfo.Attributes mô tả các thuộc tính của file như archive, system, hidden, read-only, compressed, và encrypted (tham khảo thêm trong tài liệu MSDN). Vì một file có thể có nhiều thuộc tính nên Attributes là một tập các giá trị kiểu liệt kê. Để kiểm tra hay thay đổi một thuộc tính đơn lẻ, bạn cần sử dụng các phép toán trên bit.

Ví dụ sau nhận vào một file và kiểm tra thuộc tính read-only:



Để hiểu được ví dụ trên, bạn cần biết rằng Attributes được tạo thành (ở dạng nhị phân) bởi một dãy các chữ số 0 và 1, chẳng hạn 00010011. Mỗi chữ số 1 cho biết một thuộc tính được thiết lập, mỗi chữ số 0 cho biết một thuộc tính không được thiết lập. Khi bạn sử dụng phép AND, nó sẽ so sánh mỗi chữ số này với mỗi chữ số tương ứng trong giá trị liệt kê. Ví dụ, nếu bạn AND giá trị 00100001 (mô tả thuộc tính archive và read-only) với giá trị liệt kê 00000001 (mô tả thuộc tính read-only), kết quả sẽ là 00000001 (chỉ có được chữ số 1 khi ở cả hai vị trí tương ứng đều là 1).

Khi thiết lập một thuộc tính, bạn cũng phải sử dụng phép toán trên bit. Trong trường hợp này,
bạn cần cẩn thận để không vô ý xóa các thuộc tính khác.



Hy vọng bài viết sẽ giúp các bạn hiểu rõ hơn về cách làm việc với file hay thư mục trong C#
Để hiểu rõ hơn, các bạn có thể vào đọc ebook ở địa chỉ sau:
http://www.hoang.name.vn/2015/12/giao-trinh-cshap-7-bo-ebook-cshap-tieng-viet.html

Truy xuất các thông tin về file hay thư mục trong C#

Các lớp I/O của Microsoft .NET gồm hai loại chính. Loại thứ nhất truy xuất thông tin từ hệ thống file và cho phép thực hiện các thao tác trên hệ thống file (như chép file, chuyển thư mục). Hai lớp tiêu biểu là FileInfo và DirectoryInfo. Loại thứ hai quan trọng hơn, gồm rất nhiều lớp cho phép đọc và ghi dữ liệu từ mọi kiểu stream. Stream có thể tương ứng với một file nhị phân hay văn bản, một file trong không gian lưu trữ riêng, một kết nối mạng, hoặc một vùng đệm bộ nhớ. Trong mọi trường hợp, cách thức tương tác với stream đều như nhau. Trong chương này, chúng ta sẽ xem xét các lớp hệ thống file và các lớp dựa trên stream.

Như tiêu đề, bạn cần truy xuất các thông tin về một file hay một thư mục, chẳng hạn ngày tạo hay các thuộc tính của chúng.

Giải pháp của chúng ta: Tạo đối tượng System.IO.FileInfo cho file hay đối tượng System.IO.DirectoryInfo cho thư mục. Sau đó, truyền đường dẫn tới file hay thư mục đó trong phương thức khởi dựng. Các thông tin cần thiết sẽ được truy xuất thông qua các thuộc tính của đối tượng.

Để tạo một đối tượng FileInfo hay DirectoryInfo, bạn cần truyền đường dẫn tương đối hay đầy đủ trong phương thức khởi dựng của nó. Bạn có thể lấy các thông tin về file hay thư mục thông qua các thuộc tính của đối tượng tương ứng. Bảng dưới liệt kê các thành viên của lớp FileInfo và DirectoryInfo:

Các thành viên của FileInfo và DirectoryInfo
Thành viênThuộc lớpMô tả
ExistsFileInfo và DirectoryInfoTrả về true hay false, tùy thuộc vào file hay thư mục có tồn tại ở đường dẫn được chỉ định hay không.
AttributesFileInfo và DirectoryInfoTrả về một hoặc nhiều giá trị thuộc kiểu liệt kê System.IO.FileAttributes, cho biết các thuộc tính của file hay thư mục.
CreationTime, LastAccessTime, và LastWriteTimeFileInfo và DirectoryInfoTrả về các thể hiện System.DateTime cho biết khi nào một file hay thư mục được tạo ra, truy xuất lần cuối, và cập nhật lần cuối.
FullName, Name, và ExtensionFileInfo và DirectoryInfoTrả về một chuỗi chứa tên đầy đủ, tên thư mục hay tên file (cùng phần mở rộng), và phần mở rộng.
LengthFileInfoTrả về kích thước file (tính theo byte).
DirectoryName và DirectoryFileInfoDirectoryName trả về chuỗi chứa tên của thư mục cha; Directory trả về đối tượng DirectoryInfo mô tả thư mục cha, cho phép bạn truy xuất thêm thông tin về nó.
Parent và RootDirectoryInfoTạo một thư mục bên trong thư mục được mô tả bởi đối tượng DirectoryInfo, tên thư mục cần tạo được truyền cho phương thức. Trả về đối tượng DirectoryInfo mô tả thư mục con vừa tạo.
GetDirectoriesDirectoryInfoTrả về mảng các đối tượng DirectoryInfo, mỗi đối tượng mô tả một thư mục con trong thư mục này.
GetFilesDirectoryInfoTrả về mảng các đối tượng FileInfo, mỗi đối tượng mô tả một file trong thư mục này.

Chú ý hai điểm quan trọng khi sử dụng các đối tượng FileInfo và DirectoryInfo:
· Tất cả các thuộc tính của đối tượng FileInfo và DirectoryInfo được đọc ngay lần đầu tiên bạn truy xuất một thuộc tính nào đó. Nếu file hay thư mục thay đổi sau thời điểm này, bạn phải gọi phương thức Refresh để cập nhật các thuộc tính.
· Sẽ không có lỗi nếu bạn chỉ định một đường dẫn không tương ứng với một file hay thư mục đang tồn tại khi tạo một đối tượng FileInfo hay DirectoryInfo. Thay vào đó, bạn sẽ nhận được một đối tượng mô tả file hay thư mục không tồn tại—thuộc tính Exists của nó có giá trị false. Bạn có thể sử dụng đối tượng này để tạo file hay thư mục bằng cách gọi phương thức Create của nó. Nếu bạn truy xuất thuộc tính khác, ngoại lệ FileNotFoundException hay DirectoryNotFoundException sẽ bị ném.

Ứng dụng Console dưới đây nhận một đường dẫn file từ dòng lệnh, và rồi hiển thị thông tin về file và thư mục chứa file.




Nếu bạn thực thi lệnh FileInformation c:\windows\win.ini, kết xuất có thể như sau:
Checking file: win.ini
File exists: True
File created: 2001-08-23 8:00:00 AM
File last updated: 2003-03-22 9:55:16 AM
File last accessed: 2003-05-26 2:21:53 PM
File size (bytes): 2128
File attribute list: Archive
Checking directory: windows
In directory: c:\
Directory exists: True
Directory created: 2000-01-01 8:03:33 AM
Directory last updated: 2003-05-26 2:25:25 PM
Directory last accessed: 2003-05-26 2:25:25 PM
Directory attribute list: Directory
Directory contains: 147 files

Hy vọng bài viết sẽ giúp các bạn hiểu rõ hơn về cách làm việc với file hay thư mục trong C#
Để hiểu rõ hơn, các bạn có thể vào đọc ebook ở địa chỉ sau:
http://www.hoang.name.vn/2015/12/giao-trinh-cshap-7-bo-ebook-cshap-tieng-viet.html

Wednesday, October 18, 2017

Hướng dẫn phân trang bằng PetaPOCO - ASP.net MVC

Chào các bạn!
Trong bài hướng dẫn trước, mình đã giới thiệu các phương thức để thao tác với dữ liệu, nếu muốn tìm hiểu các bạn có thể vào link sau: Hướng dẫn Create, Update, Delete bằng PetaPOCO - ASP.net MVC.

Hôm nay, mình sẽ tiếp tục hướng dẫn các bạn phân trang bằng PetaPOCO. Mình đã code sẵn, các bạn down về để tham khảo: https://mega.nz/#!PYhQmC7B!6B1FYHRDe4xCS4666rneFyCdHIgR_gMJI64OFd7-hTY

1. Giới thiệu về Page trong PetaPOCO
Trong PetaPOCO có hỗ trợ cho chúng ta một đối tượng Page<T> để chứa danh sách các giá trị được phân theo trang


Trong đó
 - Items: là danh sách các phần tử đã được phân trang (List<T>)
 - CurrentPage: là trang hiện tại của danh sách
 - ItemsPerPage: là số phần tử trong 1 trang
 - TotalItems: là tổng số phần tử muốn phần trang
 - TotalPages: là tổng số trang

2. Sử dụng

Chúng ta sẽ xem đoạn code sau trong thư mục Controllers/HomeController.cs
Phân trang trong PetaPOCO
Như đoạn code trên cho thấy, để phân trang ta dùng phương thức Page và truyền vào 3 biến:
- pagenum: số trang mà ta muốn xem
- pagesize: số phần tử trên 1 trang
- câu truy vấn
Nhờ vào giá trị trả về của phương thức Page nên ta có thể dễ dàng tạo ra được các chỉ số phân trang như trong file "View/Home/Index.cshtml"

Phân trang

Như vậy là mình đã gợi ý xong cho các bạn những phương thức phân trang của PetaPOCO.
Để biết thêm về các câu lệnh cũng như hiểu rõ hơn về PetaPOCO thì các bạn vào địa chỉ sau: https://github.com/CollaboratingPlatypus/PetaPoco

Cám ơn các bạn đã theo dõi! Thank.


Tuesday, October 17, 2017

Hướng dẫn Create, Update, Delete bằng PetaPOCO - ASP.net MVC

Chào các bạn!
Lần trước mình đã hướng dẫn cách kết nối database bằng PetaPOCO, nếu bạn nào chưa biết thì có thể xem lại ở đây Hướng đẫn sử dụng PetaPOCO trong ASP.net MVC

Hôm nay mình sẽ tiếp tục hướng dẫn các bạn cách thêm, cập nhật và xóa dữ liệu bằng PetaPOCO. Mình đã code sẵn các bạn down về ở địa chỉ này nha https://mega.nz/#!6IBDiZDA!MGKEYHgA9VPwlwpI3ccnKkcVVQ1xSpKz18w4tz42s3M.

1. Thêm dữ liệu

Thêm dữ liệu
Trong đoạn code trên, chúng ta dùng phương thức Insert của PetaPOCO. Phương thức Insert có nhiều cách truyền biến, nhưng mình sẽ nói về cách sẽ sử dụng nhất. Theo cách viết code trên, chúng ta sẽ truyền 3 biến:
 - Tên bảng: Tên bảng này sẽ phải giống tên bảng trong database.
 - Tên cột khóa chính trong bảng
 - Đối tượng thao tác: Đối tượng này sẽ là dối tượng account (đang ở trong thư mục Model/account.cs)
Như vậy là chúng ta đã có thể thêm dữ liệu một cách dễ dàng

2. Cập nhật dữ liệu

Để cập nhật dữ liệu của một đối tượng, trước tiên ta phải lấy được đối tượng bằng ID của nó. Và đây là đoạn code để lấy một đối tượng khi đã biết khóa chính, chúng ta sẽ dùng FirstOrDefault của PetaPOCO như hình bên dưới. Để truyền biến vào câu query ta sẽ dùng tuần tự bắt đầu là @0, tiếp theo là @1, @2, ...Như ví dụ bên dưới, ta chỉ truyền 1 biến IdAccount nên chỉ cần dùng @0 vào câu query.

Lấy một đối tượng

Sau khi đã có một đối tượng, ta tiến hành cập nhật đối tượng đó

Cập nhật dữ liệu
Tương tự như Insert, PetaPOCO cũng hỗ trợ nhiều các truyền biến cho phương thức Update. Như cách viết trên ta sẽ truyền 3 biến:
 - Tên bảng: Tên bảng này sẽ phải giống tên bảng trong database.
 - Tên cột khóa chính trong bảng
 - Đối tượng thao tác: Đối tượng này sẽ là dối tượng account (đang ở trong thư mục Model/account.cs)

Khi PetaPOCO thực hiện lệnh Update, nó sẽ dựa vào khóa chính để cập nhật dữ liệu nên đối tượng account truyền vào lúc này phải có giá trị của khóa chính.

3. Xóa dữ liệu
Phương thức Delete của PetaPOCO cũng hỗ trợ nhiều cách truyền biến và theo mình cách code sau là phổ biến và dễ sử dụng nhất

Xóa dữ liệu
Theo cách code trên, ta sẽ xóa dữ liệu theo khóa chính của nó, có 3 biến mà chúng ta cần truyền vào:
 - Tên bảng: Tên bảng này sẽ phải giống tên bảng trong database.
 - Tên cột khóa chính trong bảng
 - Giá trị của khóa chính để xác định đối tương đang ở dòng nào trong database.

Như vậy là mình đã gợi ý xong cho các bạn những phương thức thao tác với dữ liệu của PetaPOCO.
Để biết thêm về các câu lệnh cũng như hiểu rõ hơn về PetaPOCO thì các bạn vào địa chỉ sau: https://github.com/CollaboratingPlatypus/PetaPoco

Cám ơn các bạn đã theo dõi! Thank.

Wednesday, October 4, 2017

Hướng đẫn sử dụng PetaPOCO trong ASP.net MVC

Sau bao năm học code C# trong trường và đi làm thực tế với Entity Framework (EF) và LinQ, mình đã rút ra một kết luận rằng sử dụng những câu lệnh truy vấn SQL thuần túy vẩn có hiệu suất tốt và dễ build code hơn.Cho nên hôm nay mình sẽ hướng đẫn các bạn sử dụng một thư viện rất hữu ít để có thể sử dụng các câu lệnh truy vấn SQL một cách dễ dàng mà không cần phải viết những hàm lằng nhằm để đóng, mở kết nối, lấy 1 dòng dữ liệu hoặc DataTable, ... như xưa nữa.


Như tiêu đề mình sẽ dùng ASP.net MVC để làm mẫu
1. Các bạn tạo một database để test. Ở đây mình dùng SQL Server 2012. Mình tạo 1 bảng account có các thuộc tính sau:
  • [ID] [int] IDENTITY(1,1) NOT NULL,
  • [username] [nvarchar](max) NULL,
  • [password] [nvarchar](max) NULL,


2. Đầu tiên các bạn tạo một project ASP.net MVC mới





3. Sau đó các bạn hãy tải 2 file này về nhé

Các bạn copy 2 file vừa down vào thư mục Model của project
Riêng đối với file PetaDataContext.cs sau khi copy xong, các bạn vào chỉnh sửa phần namepace lại xíu nhé
VD: project của mình có tên là testpetapoco nên mình sẽ đổi như hình, không đổi cũng chả sao cả nhưng đổi để sau này dễ nhớ dễ gọi 



4. Tiếp theo là vào chỉnh chọt trong file Web.config. Các bạn thêm đoạn code này vào và chỉnh lại thông tin SQL server của các bạn nhé


hoặc nếu database của các bạn đang dùng Windows Authentication thì dùng đoạn code sau nhé (chỉ khác cách gọi connectionString thôi)



Trong file PetaDataContext.cs chúng ta có dùng biến useConnection để kết nối các bạn có nhớ chú ý cái này, phải đặt tên giống file web.config mới chạy nhé


6. Bây giờ mình sẽ thử tạo trong bảng account một số dữ liệu mẫu


7. Các bạn vào thư mục Model tạo 1 class có tên account.cs với các thuộc tính sau



8. Tiếp tục vào thư mục Controllers -> HomeController.cs



9. Tiếp tục vào thư mục View/Home/Index.cshtml



10. Nhấn f5 thì sẽ có kết quả như sau


Hy vọng bài viết này sẽ giúp các bạn có thêm một hướng giải quyết mới trong quá trình code.
Để biết thêm về các câu lệnh cũng như hiểu rõ hơn về PetaPOCO thì các bạn vào địa chỉ sau: https://github.com/CollaboratingPlatypus/PetaPoco

Cám ơn các bạn đã theo dõi! Thank.