Viewing .NET Data - The Control DataGrid - Phần 2
Ở ví dụ trước, DataGridchỉ có thể hiển thị một DataTableđơn tại một thời
điểm. Nhưng ở ví dụ này, nó có thể điều khiển nhiều mối quan hệ trong
DataSettrên màn hình. Đoạn mãsau được dùng để tạo ra một DatasSetdựa
trên các bảng Customersvà Orderstrong cơ sở dữ liệu Northwind. Đoạn mã
này nằm trong thư mục 05_DataSourceDataSet.
Viewing .NET Data The Control DataGrid – Phần 2 Hiển thị dữ liệu từ một DataSet Ở ví dụ trước, DataGrid chỉ có thể hiển thị một DataTable đơn tại một thời điểm. Nhưng ở ví dụ này, nó có thể điều khiển nhiều mối quan hệ trong DataSet trên màn hình. Đoạn mã sau được dùng để tạo ra một DatasSet dựa trên các bảng Customers và Orders trong cơ sở dữ liệu Northwind. Đoạn mã này nằm trong thư mục 05_DataSourceDataSet. Ví dụ này thêm hai DataTable và tạo một mối quan hệ giữa chúng gọi là CustomerOrders: string source = "server=(local)\\NetSDK;" + "uid=QSUser;pwd=QSPassword;" + "database=northwind"; string orders = "SELECT * FROM Orders"; string customers = "SELECT * FROM Customers"; SqlConnection conn = new SqlConnection(source); SqlDataAdapter da = new SqlDataAdapter(orders, conn); DataSet ds = new DataSet(); da.Fill(ds, "Orders"); da = new SqlDataAdapter(customers , conn); da.Fill(ds, "Customers"); ds.Relations.Add("CustomerOrders", ds.Tables["Customers"].Columns["CustomerID"], ds.Tables["Orders"].Columns["CustomerID"]); Khi tạo, bạn có thể liên kết DataSet với DataGrid bằng cách gọi phương thức SetDataBinding: dataGrid1.SetDataBinding(ds, "Customers"); Nó sẽ tạo một hiển thị như sau: Bạn chú ý có một dấu + bên trái mỗi mẫu tin. Để biết rằng chúng ta đã tạo một Dataset với một mối quan hệ điều khiển giữa customers và orders. Bạn có thể định nghĩa nhiều mối quan hệ trong đoạn mã. Khi bạn click trên các dấu +, một danh sách các mối quan hệ hiện ra, click trên tên của mối quan hệ sẽ điều khiển khung lưới liên kết với các mẫu tin. Control DataGrid bao gồm một cặp biểu tượng mới ở góc trên bên phải. Mũi tên cho phép bạn quay lại hàng cha mẹ, và sẽ thay đổi hiển thị đến trang trước đó. Tiêu đề của hàng hiện chi tiết các mẫu tin cha mẹ có thể hiện hay ẩn bằng cách click trên những nút khác. Hiển thị dữ liệu trong một DataViewManager Hiển thị dữ liệu trong một DataViewManager thì giống như DataSet. Nhưng khi một DataViewManager được tạo cho một DataSet thì một DataView đặc biệt được tạo ra cho mỗi DataTable, cho phép bạn có thể thay đổi hiển thị hàng, dựa vào một bộ lọc hay trạng thái hàng. Nếu bạn không muốn lọc dữ liệu, bạn sẽ đề nghị luôn luôn bao một DataSet trong một DataViewManager để hiển thị. Nó cho bạn nhiều tuỳ chọn khi sửa đổi mã của bạn. Đoạn mã dưới tạo một DataViewManager dựa trên DataSet từ ví dụ trước, và sau đó thay đổi DataView cho bảng Customers để chỉ hiện customers từ UK: DataViewManager dvm = new DataViewManager(ds); dvm.DataViewSettings["Customers"].RowFilter = "Country='UK'"; dataGrid.SetDataBinding(dvm, "Customers"); Kết quả hiển thị sẽ như sau, ví dụ này có thể tìm thấy trong thư mục 06_DataSourceDataViewManager: Giao diện IListSource và IList DataGrid cũng hổ trợ bất kỳ đối tượng mà đưa vào một trong những giao diện IListSource hay IList. IListSource chỉ có một phương thức GetList() trả về một giao diện IList. IList được thực thi bởi rất nhiều lớp trong thời gian chạy. Vài lớp thực thi giao diện này là Array, ArrayList, StringCollection. Khi sử dụng IList, cùng điều kiện cho đối tượng bên trong tập hợp là true thì sự thực thi Array sẽ hiện dễ dàng hơn- Nếu sử dụng một StringCollection như nguồn dữ liệu cho DataGrid thì chiều dài của chuỗi được hiện bên trong khung lưới. Thừa kế lớp DataGrid Thừa kế lớp cho những phần chính của DataGrid được hiện bên dưới: DataGrid bao gồm 0 hay nhiều DataGridTableStyles. Những kiểu này bao gồm 0 hay nhiều DataGridColumnStyles. Một ô trong khung lưới có thể được truy cập bởi nhiều phương tiện của cấu trúc DatagridCell. DataGridTableStyle và DataGridColumnStyle Một DataGridTableStyle chứa sự miêu tả trực quan của DataTable. DataGrid chứa một tập hợp những kiểu này có thể truy cập được bằng thuộc tính TableStype. Khi một DataTable được hiển thị thì một sự kiểm tra được tạo xuyên qua tất cả đối tượng DataGridTableStype để tìm thuộc tính MappingName của nó bằng với thuộc tính TableName của DataTable. Trong khi tìm kiếm, kiểu đó sẽ được dùng trong việc hiển thị của bảng. DataGridTableStyle cho phép bạn định nghĩa những biến hiện hình cho DataGrid, như là màu nền và màu cận cảnh, font dùng trong tiêu đề cột và các thuộc tính khác. DataGridColumnStyle cho phép bạn lọc những tuỳ chọn hiển thị trên một cột, như là cài đặt trật tự của dữ liệu trong cột, văn bản được hiển thị một giá trị null và chiều rộng của cột trên màn hình. Khi DataGrid hiển thị một định nghĩa DataGridTableStype, bạn có thể định nghĩa các cột của dữ liệu được hiển thị bằng cách thêm một DataGridColumnStype. Chỉ những cột có một kiểu định nghĩa sẽ được hiển thị và có thể là lợi ích cho những cột ẩn như là giá trị của khoá chính không được hiển thị. Bạn cũng có thể định nghĩa một kiểu cột ReadOnly. Đoạn mã bên dưới là ví dụ của việc tạo một DataGridTableStyle. Đoạn mã tạo ra một đối tượng DataGridTableStyle, thêm vào hai đối tượng DataGridColumnStyle, và hiển thị tất cả dữ liệu bên trong bảng Customer. using System; using System.Windows.Forms; using System.Data; using System.Data.SqlClient; public class CustomDataGridTableStyle : System.Windows.Forms.Form { private System.Windows.Forms.Button retrieveButton; private System.Windows.Forms.DataGrid dataGrid; public CustomDataGridTableStyle() { this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(464, 253); this.Text = "07_CustomDataGridTableStyle"; this.dataGrid = new System.Windows.Forms.DataGrid(); dataGrid.BeginInit(); dataGrid.Location = new System.Drawing.Point(8, 8); dataGrid.Size = new System.Drawing.Size(448, 208); dataGrid.TabIndex = 0; dataGrid.Anchor = AnchorStyles.Bottom | AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; this.Controls.Add(this.dataGrid); dataGrid.EndInit(); this.retrieveButton = new System.Windows.Forms.Button(); retrieveButton.Location = new System.Drawing.Point(384, 224); retrieveButton.Size = new System.Drawing.Size(75, 23); retrieveButton.TabIndex = 1; retrieveButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; retrieveButton.Text = "Retrieve"; retrieveButton.Click += new System.EventHandler(this.retrieveButton_Click); this.Controls.Add(this.retrieveButton); } protected void retrieveButton_Click(object sender, System.EventArgs e) { retrieveButton.Enabled = false; DataSet sẽ được dùng tạo ra DataGridTableStyles để dùng trong ví dụ này và cuối cùng liên kết DataGrid với DataSet. Phương thức CreateDataSet không có gì mới như chúng ta thấy sau, nó chỉ đơn giản nhận tất cả hàng từ bảng Customers: DataSet ds = CreateDataSet(); CreateStyles(dataGrid); dataGrid.SetDataBinding(ds, "Customers"); } Phương thức CreateStyles() có nhiều đặc biệt. Dòng đầu tiên tạo đối tượng DataGridTableStype và cài thuộc tính MappingName của nó. Thuộc tính này được sử dụng khi DataGrid hiển thị một DataTable. DataGrid có thể hiển thị hàng trong những màu thay đổi. Đoạn mã ở đây định nghĩa màu theo từng cặp hàng. private void CreateStyles(DataGrid dg) { DataGridTableStyle style = new DataGridTableStyle(); style.MappingName = "Customers"; style.AlternatingBackColor = System.Drawing.Color.Bisque; DataGridTextBoxColumn customerID = new DataGridTextBoxColumn(); customerID.HeaderText = "Customer ID"; customerID.MappingName = "CustomerID"; customerID.Width = 200; DataGridTextBoxColumn name = new DataGridTextBoxColumn(); name.HeaderText = "Name"; name.MappingName = "CompanyName"; name.Width = 300; Khi các cột được định nghĩa, chúng được thêm vào GridColumnStypes bộ các đối tượng DataGridTableStype, các đối tượng này có thể tự thêm thuộc tính TableStype của DataGrid: style.GridColumnStyles.AddRange (new DataGridColumnStyle[]{customerID , name}); dg.TableStyles.Add(style); } private DataSet CreateDataSet() { string source = "server=(local)\\NetSDK;" + "uid=QSUser;pwd=QSPassword;" + "database=northwind"; string customers = "SELECT * FROM Customers"; SqlConnection con = new SqlConnection(source); SqlDataAdapter da = new SqlDataAdapter(customers , con); DataSet ds = new DataSet(); da.Fill(ds, "Customers"); return ds; } static void Main() { Application.Run(new CustomDataGridTableStyle()); } } Sau khi tạo đối tượng DataGridTableStyle, chúng ta tạo hai đối tượng thừa hưởng từ DataGridColumnStyle. Mọi cột có một số lượng thuộc tính được định nghĩa. Sau đây là một danh sách các thuộc tính khoá: Property Description Alignment một trong những giá trị liệt kê HorizontalAlignment - Left, Center, or Right. Nó cho biết cách mà dữ liệu trong cột được định nghĩa hợp lý. Property Description FontHeight Kích cỡ của font theo pixels. Nó sẽ mặc định nếu không có giá trị được cài. Thuộc tính này được bảo vệ, vì thế có thể chỉ sửa đổi nếu bạn tạo lớp con. HeaderText Văn bản hiển thị trong cột heading. MappingName Cột trong DataTable mô tả bởi cột hiển thị NullText Văn bản hiển thị bên trong cột nếu giá trị dữ liệu nằm dưới là DBNull. PropertyDescriptor Nó sẽ được bàn luận phần của chương ReadOnly Một cờ cho biết cột là read-write or read-only. Width Chiều rộng của cột theo pixels. Kết quả của đoạn mã hiện như sau, ví dụ này nằm trên thư mục 07_CustomDataGridTableStyle:
File đính kèm:
- Viewing.NET_Data_2.pdf