Viewing .NET Data - The Control DataGrid - Phần 1

DataGrid là một control mới hoàn toàn, được viết cho các ngôn ngữ .NET,

và nó cho phép có những cái nhìn khác nhau về dữ liệu được hiển thị. Bạn

có thể hiển thị dữ liệu bằng cách gọi phương thức SetDataBinding().

Hiển thị dữ liệu xếp theo cột:

Phần cuối của chương sẽ trình bày nhiều cách chọn dữ liệu và lấy nó trong

một bảng dữ liệu, mặc dù dữ liệu được hiển thị trong một kiểu rất cơ bản;

chúng ta chỉ đơn giản dùng Console.WriteLine()

pdf15 trang | Chuyên mục: Visual C# | Chia sẻ: dkS00TYs | Lượt xem: 1756 | Lượt tải: 2download
Tóm tắt nội dung Viewing .NET Data - The Control DataGrid - Phần 1, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
teLine() 
Ví dụ đầu tiên ở đây sẽ chỉ cách khôi phục dữ liệu và hiển thị trong một 
control DataGrid. Hình bên dưới là màn hình từ ứng dụng đã được xây 
dựng, mã nguồn của ứng dụng này nằm ở thư mục 01_DisplayTabularData: 
Ứng dụng này chọn mỗi phần tử từ bản Customer trong cơ sở dữ liệu 
NorthWind và hiển thị những phần tử này cho người dùng trong một 
DataGrid. Đoạn mã này khá ngắn, ta sẽ từng bước xem xét chúng như sau: 
using System; 
using System.Windows.Forms; 
using System.Data; 
using System.Data.SqlClient; 
public class DisplayTabularData : System.Windows.Forms.Form 
{ 
 private System.Windows.Forms.Button retrieveButton; 
 private System.Windows.Forms.DataGrid dataGrid; 
 public DisplayTabularData() 
 { 
 this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); 
 this.ClientSize = new System.Drawing.Size(464, 253); 
 this.Text = "01_DisplayTabularData"; 
Tiếp đến, ta sẽ tạo control khung lưới(grid), và cài đặt những thuộc tính của 
nó. Dòng thứ hai: dataGrid.BeginInit(); chỉ được dùng khi tạo nhiều sự thay 
đổi trên control. Nếu các sự kiện không giới hạn, mọi thay đổi trên khung 
lưới có thể tạo ra một Redraw trên màn hình. Sau đó ta xác định vị trí và 
kích thước của Control, định nghĩa chỉ mục tab, và neo control vào cả hai 
góc trên bên trái và góc dưới bên phải của cửa sổ để nó cân xứng trong cửa 
sổ ứng dụng chính. 
 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(); 
Bây giờ ta tạo nút. Cùng với những bước cơ bản theo sau trong việc khởi tạo 
nút: 
 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); 
Chúng ta có một sự kiện click gọi bộ điều khiển sự kiện retrieveButton_click 
protected void retrieveButton_Click(object sender, System.EventArgs e) 
 { 
 retrieveButton.Enabled = false; 
 string source = "server=(local)\\NetSDK;" + 
 "uid=QSUser;pwd=QSPassword;" + 
 "database=Northwind"; 
Sau khi chọn dữ liệu từ bảng Customer và điền dữ liệu vào tập dữ liệu. Ta 
gọi phương thức SetĐataBlinding để gắn kết dữ liệu giữa tập dữ liệu và 
khung lưới. Phương thức này sẽ được truyền vào tập dữ liệu và tên của bảng 
trong DataSet. Một khung lưới có thể chỉ hiện dữ liệu từ một DataTable tại 
một thời điểm mặc dù DataSet chứa nhiều bảng. 
 string select = "SELECT * FROM Customers" ; 
 SqlConnection conn = new SqlConnection(source); 
 SqlDataAdapter da = new SqlDataAdapter( select , conn); 
 DataSet ds = new DataSet(); 
 da.Fill(ds , "Customers"); 
 dataGrid.SetDataBinding(ds , "Customers"); 
 } 
 static void Main() 
 { 
 Application.Run(new DisplayTabularData()); 
 } 
} 
Để biên dịch đoạn mã trên bạn gõ dòng lệnh sau: 
csc /t:winexe /debug+ /r:System.dll /r:System.Data.dll 
/r:system.windows.forms.dll 
 /recurse:*.cs 
Tham số /recurse:*.cs sẽ biên dịch tất cả tập tin .cs trong thư mục hiện hành 
và các thư mục con. Đó là một cách viết tắt, nên bạn không cần phải nhớ tất 
cả các tập tin nhưng bạn phải chắc chắn là chỉ có những tập tin bạn cần nằm 
trong thư mục đó. 
Nguồn dữ liệu: 
DataGrid là một cách rất linh động để hiển thị dữ liệu; thêm vào đó là để gọi 
phương thức SetDataBlinding() với một DataSet và tên của bảng để hiển thị 
thì phương thức này sẽ được gọi với bất kỳ nguồn dữ liệu sau: 
 Một mảng 
 Datatable 
 DataView 
 DataSet hay DataViewManager 
 Những thành phần thực thi giao diện IListSource 
 Những thành phần thực thi giao diện IList 
Hiển thị dữ liệu từ một mảng: 
Nhìn thoáng qua có vẽ rất dễ dàng. Tạo một mảng, điền dữ liệu vào mảng và 
gọi phương thức SetDataBlinding(array,null) trên DataGrid. Như ví dụ sau: 
string[] stuff = new string[] {"One", "Two", "Three"}; 
dataGrid.SetDataBinding(stuff, null); 
Chú ý rằng phương thức SetDataBlinding() chỉ có hai tham số, tham số đầu 
là nguồn dữ liệu trong trường hợp này là mảng, tham số còn lại: nếu nguồn 
dữ liệu là DataSet hay DataViewMannager thì gán bằng tên của bảng muốn 
hiển thị còn ngược lại được gán giá trị null. 
Bạn có thể thay thế đoạn mã trong bộ điều khiển sự kiện 
retriveButton_click() của ví dụ trước với đoạn mã ở trên. Kết quả hiển thị sẽ 
có vấn đề sau: 
Bạn sẽ thấy kết quả hiển thị có nhiều hơn số chuỗi mà bạn định nghĩa trong 
mảng, Khung lưới sẽ hiển thị thêm chiều dài của những chuỗi đó. Nguyên 
nhân là khi sử dụng mảng là nguồn dữ liệu của Datagrid thì khung lưới sẽ 
tìm thuộc tính chung đầu tiên của đối tượng bên trong mảng để hiển thị và 
trường hợp này đó chính là chiều dài của chuỗi đó. 
Một cách giải quyết đó là tạo một lớp bao bọc cho các chuỗi này như bên 
dưới: 
protected class Item 
{ 
 public Item(string text) 
 { 
 m_text = text; 
 } 
 public string Text 
 { 
 get{return m_text;} 
 } 
 private string m_text; 
} 
Khi thêm một mảng lớp Item như trên, bạn sẽ nhận được kết quả mong 
muốn, mã nguồn của ứng dụng này nằm trên thư mục 02_DataSourceArray 
DataTable 
Có hai cách chính để hiển thị một DataTable trong một DataGrid: 
 Nếu DataTable của bạn đứng một mình thì gọi phương thức 
SetDataBlingding(DataTable,null) 
 Nếu DataTable của bạn chứa một DataSet thì gọi 
SetDataBlinding(DataSet,"") 
Ví dụ bên dưới lấy từ đoạn mã trong thư mục 03_DatasourceDataTable để 
hiện một số cột: 
Chú ý hiển thị của cột cuối cùng; nó hiện một checkbox để thay cho các 
control thông thường. DataGrid sẽ đọc lượt đồ từ nguồn dữ liệu và suy ra 
các kiểu cột mà control được hiển thị. 
Dữ liệu trong cơ sở dữ liệu không thay đổi khi bạn thay đổi các trường trong 
khung lưới dữ liệu. 
Hiển thị dữ liệu từ một DataView 
Một DataView cung cấp phương tiện để lọc và sắp xếp dữ liệu bên trong một 
DataTable. Khi bạn chọn một dữ liệu từ một cơ sở dữ liệu, thông thường nó 
cho phép người dùng sắp xếp dữ liệu đó. Thêm vào đó, bạn muốn lọc dữ liệu 
để chỉ hiện những hàng nào đó. Một DataView cho phép bạn giới hạn số 
hàng hiển thị cho người dùng nhưng nó không giới hạn số cột trong 
DataTable. 
Một DataView không cho phép bạn thay đổi các cột để hiển thị mà chỉ thay 
đổi các hàng. 
Bên dưới đây là một dòng mã để tạo một DataView dựa trên một DataTable 
đang tồn tại. Đoạn mã ví dụ này nằm trên thư mục 04_DataSourceDataView 
: 
DataView dv = new DataView(dataTable); 
Khi tạo bạn có thể thay đổi các cài đặt trên DataView, và nó sẽ ảnh hưởng 
đến dữ liệu và các tác vụ khi chúng được hiển thị bên trong một DataGrid. 
Một vài ví dụ là: 
 Cài đặt AllowEdit = false khoá chức năng chỉnh sửa các dòng 
 Cài đặt AllowNew = false khoá chức năng tạo dòng mới 
 Cài đặt AllowDelete = false khoá khả năng xoá dòng 
 Cài đặt RowStateFilter chỉ hiển thị những dòng của một trạng thái 
được cho 
 Cài đặt RowFilter để lọc hàng 
 Xắp xếp các dòng bằng các cột nào đó 
Lọc các hàng bằng dữ liệu: 
Khi bạn tạo một DataView, bạn có thể thay đổi dữ liệu hiển thị bằng cách cài 
đặt thuộc tính RowFilter. Thuộc tính này như một chuỗi được dùng như một 
phương tiện để lọc trên những tiêu chuẩn nào đó- giá trị của chuỗi được 
dùng như tiêu chuẩn lọc. 
Vài ví dụ về các mệnh đề lọc được chỉ trong bảng dưới đây 
Mệnh đề Mục đích 
UnitsInStock > 50 Chỉ những hàng có UnitslnStock lớn hơn 50 
Client = 'Smith' Chỉ trả về những mẫu cho một client 
County LIKE 'C*' Trả về tất cả mẫu mà trường Country bắt đầu ký tự C 
Lọc các hàng trên trạng thái 
Mọi hàng trên DataView có một tập định nghĩa hàng, nó sẽ là một trong 
những giá trị sau. Tập này có thể được dùng để lọc những hàng được xem 
bởi người dùng: 
DataViewRowState Mục đích 
Added Tất cả hàng được tạo mới 
CurrentRows Tất cả hàng ngoại trừ những hàng được chọn sẽ bị xoá 
Deleted tất cả hàng được chọn bị xoá 
ModifiedCurrent Dãy tất cả hàng bị sửa đổi và hiện giá trị hiện hành cho 
mọi cột 
ModifiedOriginal Dãy tất cả hàng bị sửa đổi nhưng hiện giá trị ban đầu 
cho các cột chứ không phải giá trị hiện hành 
OriginalRows Tất cả hàng được chọn ban đầu từ nguồn dữ liệu 
.Không có những hàng mới. Chỉ hiện những giá trị ban 
đầu của các cột. 
DataViewRowState Mục đích 
Unchanged Tất cả các hàng không thể bị thay đổi 
Để xem ảnh hưởng của các trạng thái này trên một khung lưới, ta viết một ví 
dụ hiển thị hai khung lưới: một chứa dữ liệu được chọn từ cơ sở dữ liệu mà 
bạn có thể tương tác, cái còn lại hiện các hàng trong một trong những trạng 
thái trên. 
 Bộ lọc không chỉ áp dụng đối với các hàng mà còn với trạng thái của các 
cột bên trong những hàng này. 
Sắp xếp các hàng: 
 Khi lọc dữ liệu, đôi lúc bạn cần sắp xếp dữ liệu trong một Dataview. Bạn có 
thể click trên tiêu đề của cột trong control DataGrid, và nó sẽ sắp xếp một 
cột theo thứ tự giảm dần hoặc tăng dần. Tuy nhiên bạn chỉ có thể sắp xếp 
một cột, những nơi nào có Dataview gạch dưới thì có thể sắp xếp theo nhiều 
cột. 
Khi một cột được sắp xếp, DataGrid sẽ hiển thị một mũi tên để cho biết cột 
đã được sắp xếp. 
Để thực hiện sắp xếp trên một cột bạn sử dụng thuộc tính Sort của 
DataView: 
dataView.Sort = "ProductName"; 
dataView.Sort = "ProductName ASC, ProductID DESC"; 
Dòng đầu tiên sẽ được sắp xếp theo cột ProductName. Dòng thứ hai sẽ được 
sắp xếp thứ tự tăng dần theo cột ProductName và sau đó theo thứ tự giảm 
dần của ProductID. 
Dataview hỗ trợ sắp xếp tăng dần và giảm dần trên các cột. Nếu bạn chọn 
sắp xếp trên nhiều cột thì DataGrid sẽ ngừng hiện các mũi tên sắp xếp. 

File đính kèm:

  • pdfViewing.NET_Data_1.pdf