« Home « Kết quả tìm kiếm

DataGrid (part I)


Tóm tắt Xem thử

- DataGrid trong .NET tuy có các chức năng giống như trong VB6 nhưng đã được nâng cấp vượt bực và cách dùng thay đổi rất nhiều nên coi như ta phải học lại từ đầu.Cách dùng thông thường nhất của một DataGrid trong VB6 là hiển thị một Table các records trong dạng một spreadsheet, mỗi hàng (row) chứa các datafields của một record và mỗi cột (column) có header cho biết là datafield gì.Nói cho đúng ra, nằm sau lưng mỗi DataGrid là một Recordset, tức là một Set of Records mà ta chọn lấy từ database.
- Giới thiệu ADO.NET.
- Trong một bài tới ta sẽ học chi tiết về Data Access trong VB.NET, nên hiện giờ chỉ cần biết đại khái về Dataset để dùng trong các thí dụ áp dụng DataGrid.Trong ADO (ActiveX Data Object) của VB6 ta dùng Connection để nối chương trình áp dụng của mình với cơ sở dữ liệu và lấy ra một Recordset.
- Trong ADO.NET của .NET sau khi thiết lập connection với cơ sở dữ liệu ta copy một hay nhiều Recordset vào Dataset.
- Các Recordset nầy có thể có mối liên hệ Master/Slave Relation với nhau.
- Người Update record sau có thể viết chồng lên Edited Record của người trước khiến cho những thay đổi người trước đánh.
- vào bị mất.Cái hay của ADO.NET là khi ta muốn Update Dataset, connection sẽ được tự động nối lại và dataset sẽ được reconciled với cơ sỡ dữ liệu.
- Bên trong Dataset có chứa các trị số cũ của datafields để dùng vào việc so sánh khi Reconcile các records.Có lẽ bạn thắc mắc tại sao Microsoft lại bày đặt thêm ra chuyện ADO.NET với ý niệm disconnected database chi cho mệt, như có người trào phúng: "Mỗi năm lại thêm một kỹ thuật mới về Data Access từ Microsoft".
- Ngay cả nếu chỉ muốn dùng Application trong nội bộ ta cũng có thể dùng Intranet.
- Như thế ta chỉ cần triển khai một Application duy nhất để dùng cho cả người ngoài (Internet), lẫn nội bộ (Intranet).Dataset của ADO.NET cho ta các lợi ích thực tiển như:.
- Hoàn toàn trong bộ nhớ: Một Table trong Dataset là một Array of Rows, nên ta có thể dùng thẳng (direct access) một record bằng cách nói đến cái Row chứa nó, chớ không cần phải dùng MoveNext, MovePrev,.v.v..
- Dataset có thể được biểu diển bằng một XML (eXtensible Marked Language): Ta có thể dùng các công cụ của XML để làm việc với Dataset, trao đổi Dataset giữa các computers trên mạng dưới dạng XML, thậm chí có thể chứa một cơ sở dữ kiện nho nhỏ dưới dạng một XML..
- Chúng ta muốn hiển thị các records của một Table trong Dataset để biểu diễn các chức năng của DataGrid.
- Bạn có thể click lên cái cái tam giác bên phải của hộp Combobox để select chữ frmAlarmList để chỉ định nó làm Startup form..
- Trong chương trình nầy ta lo về an ninh và muốn hiển thị các cánh cửa trong tòa nhà bị mở cửa ngoài giờ làm việc.
- Nếu áp dụng ngoài đời thì Real-time Data sẽ được thu thập từ các dụng cụ gọi là Data Acquisition hay Telemetry Monitoring Devices và báo cáo cho hệ thống trung ương để cập nhật hóa Dataset mà ta dùng để hiển thị trong DataGrid.Bạn hãy click IDE menu command Project | Add New Item rồi chọn XML File và đặt tên nó là AlarmList.xml như trong hình dưới đây:.
- description="Level 1 backroom door".
- description="Level 1 kitchen side door".
- description="Side door of third level".
- description="Front door of tenth level".
- description="Back door of nineth level".
- Chú ý là MenuCommand XML chỉ hiện ra khi ta làm việc với XML file của project (doubleclick tên AlarmList.xml trong Solution Explorer).
- Một Schema của file AlarmList.xml, tên AlarmList.xsd, sẽ hiện ra trong Solution Explorer và bạn có thể doubleclick tên AlarmList.xsd để làm việc với file ấy..NET IDE cho ta hình của Schema để ta có thể Edit dễ dàng..
- AlarmList.xsd cũng là một XML file, nó chứa chi tiết về cấu trúc của AlarmList.xml và Datatype (loại data ) của từng Element và Attribute trong file AlarmList.xml.
- Bây giờ click trở lại Tab DataSet, đoạn dùng MenuCommand Schema | Generate Dataset để tạo ra cấu trúc của một DataSet dựa vào Schema AlarmList.xsd..
- Một file tên AlarmList.vb sẽ được tạo ra trong source code folder của project.
- Để hiển thị data trong DataGrid, ta có thể bind (buộc) nó vào Dataset, Array hay Collection.
- Thật ra, nếu bạn muốn, bạn có thể câu cả DataGrid vào một Set của Listbox Items.
- DataGrid trong .NET có thể hiển thị cả Master/Detail records nên nó đảm nhận luôn chức năng của MSHFlexGrid trong VB6..
- Declare a Dataset of type alarmlist from AlarmList.vb that was created from the schema AlarmList.xsd.
- Load the XML data from file AlarmList.xml in the source code folder.
- DS.ReadXml("../AlarmList.xml").
- Bây giờ bạn có thể chạy chương trình của chúng ta.
- Hiển thị các cột data theo ý mình.
- Trong hình trên tất cả datafields của mỗi record được hiển thị với cùng bề ngang và với datafield name của chúng dùng làm đề tựa của mỗi cột.
- Ta có thể dùng DataGridTableStyle object để hiển thị các cột data theo ý mình bằng cách gọi Sub AddCustomDataTableStyle() (có code liệt kê dưới đây) trong Sub BtnLoadXMLData_Click..
- Instantiate a DataGridTableStyle object Dim ts1 As New DataGridTableStyle().
- ts1.MappingName = "alarm".
- ts1.AlternatingBackColor = Color.Beige ' Make alternating row beige.
- ts1.RowHeadersVisible = False ' Make RowHeaders (on the left of DataGrid) invisible.
- Dim boolCol1 As New DataGridBoolColumn.
- Boolean boolCol1.MappingName = "ackn".
- Name of datafield boolCol1.HeaderText = "Ackn".
- boolCol1.Width = 35.
- ts1.GridColumnStyles.Add(boolCol1).
- Dim TextCol1 As New DataGridTextBoxColumn.
- Text TextCol1.MappingName = "priority".
- TextCol1.HeaderText = "Prio".
- TextCol1.Width = 30.
- ts1.GridColumnStyles.Add(TextCol1).
- Dim TextCol2 As New DataGridTextBoxColumn() TextCol2.MappingName = "datetime".
- TextCol2.HeaderText = "Time".
- TextCol2.Width = 110.
- ts1.GridColumnStyles.Add(TextCol2).
- Dim boolCol2 As New DataGridBoolColumn() boolCol2.MappingName = "alarm".
- boolCol2.HeaderText = "ALM".
- boolCol2.Width = 30.
- ts1.GridColumnStyles.Add(boolCol2).
- Dim boolCol3 As New DataGridBoolColumn() boolCol3.MappingName = "isolate".
- boolCol3.HeaderText = "ISO".
- boolCol3.Width = 30.
- ts1.GridColumnStyles.Add(boolCol3).
- Dim boolCol4 As New DataGridBoolColumn() boolCol4.MappingName = "fault".
- boolCol4.HeaderText = "FLT".
- boolCol4.Width = 30.
- ts1.GridColumnStyles.Add(boolCol4).
- Dim TextCol3 As New DataGridTextBoxColumn() TextCol3.MappingName = "pointid".
- TextCol3.HeaderText = "PointID".
- TextCol3.Width = 70.
- ts1.GridColumnStyles.Add(TextCol3).
- Dim TextCol4 As New DataGridTextBoxColumn() TextCol4.MappingName = "description".
- TextCol4.HeaderText = "Description".
- TextCol4.Width = 210.
- ts1.GridColumnStyles.Add(TextCol4).
- Dim TextCol5 As New DataGridTextBoxColumn() TextCol5.MappingName = "statusvalue".
- TextCol5.HeaderText = "Status/Value".
- TextCol5.Width = 150.
- ts1.GridColumnStyles.Add(TextCol5).
- Dim TextCol6 As New DataGridTextBoxColumn() TextCol6.MappingName = "diagram".
- TextCol6.HeaderText = "Diag".
- TextCol6.Width = 40.
- ts1.GridColumnStyles.Add(TextCol6).
- DataGrid1.TableStyles.Add(ts1) End Sub.
- Muốn hiển thị datafield nào của record ta tạo cho nó một cột hoặc là Text hoặc là Boolean.
- Nếu là Text thì ta instantiate một object loại DataGridTextBoxColumn, nếu là Boolean thì ta instantiate một object loại DataGridBoolColumn.MappingName của DataGridTextBoxColumn hay DataGridBoolColumn là tên của Datafield..
- Width là bề ngang của cột mà bạn phải thí nghiệm các con số vài lần cho nó hiển thị vừa vặn.Cột nào ta cho vô trước thì hiển thị bên trái, vô sau thì nằm bên phải.
- hiển thị.
- Sau khi chuẩn bị DataGridTableStyle đầy đủ rồi, ta cho nó vào Collection TableStyles của DataGrid1.Kế đó Edit property Text của DataGrid1 cho nó câu "Dùng DataGridTableStyle để hiển thị theo ý mình".

Xem thử không khả dụng, vui lòng xem tại trang nguồn
hoặc xem Tóm tắt