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.

pdf14 trang | Chuyên mục: Visual C# | Chia sẻ: dkS00TYs | Lượt xem: 2084 | Lượt tải: 3download
Tóm tắt nội dung Viewing .NET Data - The Control DataGrid - Phần 2, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
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:

  • pdfViewing.NET_Data_2.pdf