
Viewing .NET Data - Visual Studio và Data Access – Phần 3
Thông tin tài liệu:
Nội dung trích xuất từ tài liệu:
Viewing .NET Data - Visual Studio và Data Access – Phần 3 Viewing .NET DataVisual Studio và Data Access – Phần 3Tạo DataRowLớp ProductRow được tạo như trình bày bên dưới:public class ProductRow : DataRow{ private ProductDataTable tableProduct; internal ProductRow(DataRowBuilder rb) : base(rb) { this.tableProduct = ((ProductDataTable)(this.Table)); } public string Name { ... } public bool IsNameNull { ... } public void SetNameNull { ... } // Other accessors/mutators omitted for clarity}Khi các attribute được thêm vào một phần tử, một thuộc tính được thêm vàolớp DataRow như ở trên. Thuộc tính có cùng tên như attribute, vì thế trongví dụ trên cho hàng Product, có các thuộc tính như Name, SKU, Description,và Price.Để mọi attribute thêm vào, sự thay đổi được tạo trong tập tin.cs. Trong ví dụbên dưới sẽ chỉ ta thêm một attribute gọi là ProductIDLớp ProductDataTable đầu tiên có một thành viên riêng được thêm làDataColumn:private DataColumn columnProductId;Nó được tham gia bởi một thuộc tính có tên ProductIDColumn :internal DataColumn ProductIdColumn{ get { return this.columnProductId; }}Phương thức AddProductRow() trình bày ở trên được sửa đổi, nó mang mộtProductId số nguyên và lưu trữ giá trị trong một cột được tạo mới:public ProductRow AddProductRow ( ... , int ProductId){ ProductRow rowProductRow = ((ProductRow)(this.NewRow())); rowProductRow.ItemArray = new Object[] { ... , ProductId}; this.Rows.Add(rowProductRow); return rowProductRow;}Cuối cùng, trong ProductDataTable, có một sự sửa đổi đến phương thứcInitClass():private void InitClass(){ ... this.columnProductID = new DataColumn(ProductID, typeof(int), null, System.Data.MappingType.Attribute); this.Columns.Add(this.columnProductID); this.columnProductID.Namespace = ;}Nó tạo DataColumn mới và thêm nó vào Columns Collection củaDataTable. Tham số cuối cùng cho hàm dựng DataColumn định nghĩa cáchcột này được vẽ lên XML. Điều này có lợi khi DataSet được lưu vào một tậptin XMLLớp ProductRow được cập nhật để thêm một bộ truy cập cho cột này:public int ProductId{ get { return ((int)(this[this.tableProduct.ProductIdColumn])); } set { this[this.tableProduct.ProductIdColumn] = value; }}Tạo EventArgsLớp cuối cùng được thêm vào mã nguồn là một sự thừa hưởng củaEventArgs, lớp này cung cấp các phương thức truy cập trực tiếp vào hàng đãđược thay đổi, và hành động được áp dụng vào hàng đó. Đoạn mã này đã bịxoá cho ngắn gọn hơn.Những yêu cầu khácMột yêu cầu chung khi hiển thị dữ liệu là cung cấp một menu Pop-up chomột hàng. Có nhiều cách để thực hiện nhưng ta tập trung vào một cách cóthể đơn giản các đoạn mã được yêu cầu, Nếu phạm vi hiển thị là mộtDataGrid, nơi có một DataSet với vài mối quan hệ được hiển thị. Vấn đề ởđây là menu ngữ cảnh phụ thuộc vào hàng đang được chọn, và hàng đó cóthể đến từ bất kỳ DataTable nguồn nào trong DataSet.Chức năng của menu ngữ cảnh thì thích hợp để đạt mục đích chung, sự thựcthi ở đây sử dụng một lớp cơ sở để hổ trợ một menu pop-up thừa hưởng từlớp cơ sở này.Khi người dùng click phải trên bất kỳ phần nào của một hàng trongDataGrid, chúng ta sẽ tìm kiếm hàng và kiểm tra nếu nó thừa hưởng từContextDataRow và phương thức PopupMenu() có thể được gọi. Bạn nênthực thi nó bằng cách sử dụng một giao diện nhưng trong thể hiện này mộtlớp cơ sở thì đơn giản hơn.Ví dụ này sẽ chỉ cách để tạo các lớp DataRow và Datatable, các lớp này cóthể sử dụng để cung cấp truy cập type-safe đến dữ liệu.Minh hoạ bên dưới trình bày thừa kế lớp cho ví dụ này:Đoạn mã đầy đủ nằm trong thư mục 11_Miscellaneous:using System;using System.Windows.Forms;using System.Data;using System.Data.SqlClient;using System.Reflection;public class ContextDataRow : DataRow{ public ContextDataRow(DataRowBuilder builder) : base(builder) { } public void PopupMenu(System.Windows.Forms.Control parent, int x, inty) { // Use reflection to get the list of popup menu commands MemberInfo[] members = this.GetType().FindMembers(MemberTypes.Method, BindingFlags.Public | BindingFlags.Instance , new System.Reflection.MemberFilter(Filter), null);if (members.Length > 0){ // Create a context menu ContextMenu menu = new ContextMenu(); // Now loop through those members and generate the popup menu // Note the cast to MethodInfo in the foreach foreach (MethodInfo meth in members) { // Get the caption for the operation from the // ContextMenuAttribute ContextMenuAttribute[] ctx = (ContextMenuAttribute[]) meth.GetCustomAttributes(typeof(ContextMenuAttribute), true); MenuCommand callback = new MenuCommand(this, meth); MenuItem item = new MenuItem(ctx[0].Caption, new EventHandler(callback.Execute)); item.DefaultItem = ctx[0].Default; menu.MenuItems.Add(item); } System.Drawing.Point pt = new System.Drawing.Point(x,y); menu.Show(parent, pt); }}private bool Filter(MemberInfo member, object criteria){ bool bInclude = false; // Cast MemberInfo to MethodInfo MethodInfo meth = member as MethodInfo; if (meth != null) if (meth.ReturnType == typeof(void)) { ParameterInfo[] parms = meth.GetParameters(); if (parms.Length == 0) { // Lastly check if there is a ContextMenuAttribute on the // method... object[] atts = meth.GetCustomAttributes ...
Tìm kiếm theo từ khóa liên quan:
lập trình tài liệu lập trình kỹ thuật lập trình giáo trình C ngôn ngữ lập trình C tự học lập trình với CTài liệu có liên quan:
-
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 306 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 246 0 0 -
Giới thiệu môn học Ngôn ngữ lập trình C++
5 trang 222 0 0 -
101 trang 211 1 0
-
Bài giảng Nhập môn về lập trình - Chương 1: Giới thiệu về máy tính và lập trình
30 trang 188 0 0 -
Luận văn: Nghiên cứu kỹ thuật giấu tin trong ảnh Gif
33 trang 159 0 0 -
Tìm hiểu về ngôn ngữ lập trình C: Phần 1 - Quách Tuấn Ngọc
211 trang 154 0 0 -
Giáo trình Lập trình C căn bản - HanoiAptech Computer Education Center
136 trang 141 0 0 -
161 trang 139 1 0
-
Giáo trình Vi điều khiển PIC: Phần 1
119 trang 130 0 0 -
Báo cáo thực tập Công nghệ thông tin: Lập trình game trên Unity
27 trang 126 0 0 -
Bài giảng lập trình c căn bản - Trường Apptech - Chương 4
27 trang 121 0 0 -
Bài giảng Phương pháp lập trình: Chương 9 - GV. Từ Thị Xuân Hiền
36 trang 119 0 0 -
Giáo trình về phân tích thiết kế hệ thống thông tin
113 trang 119 0 0 -
Đồ án vi xử lý đề tài : nghiên cứu thiết kế mạch đo khoảng cách sử dụng vi điều khiển Pic 16F887
45 trang 117 1 0 -
LUẬN VĂN: Tìm hiểu kỹ thuật tạo bóng cứng trong đồ họa 3D
41 trang 115 0 0 -
Bài giảng Kỹ thuật lập trình - Chương 10: Tổng kết môn học (Trường Đại học Bách khoa Hà Nội)
67 trang 113 0 0 -
Giáo trình Nhập môn lập trình VB6: Phần 2
184 trang 110 0 0 -
Bài giảng lập trình c căn bản - Trường Apptech - Chương 6
21 trang 108 0 0 -
150 trang 107 0 0