1. Trang chủ
  2. » Công Nghệ Thông Tin

Giáo trình môn học/mô đun: Lập trình web với ASP.NET: Phần 2

42 17 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 42
Dung lượng 10,2 MB

Nội dung

(NB) Giáo trình môn học/mô đun: Lập trình web với ASP.NET: Phần 2 cung cấp cho người học những nội dung kiến thức về: Xây dựng lớp xử lý dữ liệu, xây dựng đối tượng thể hiện, xây dựng và quản lý ứng dụng, web service, phụ lục cơ sở dữ liệu dùng trong ứng dụng. Mời các bạn cùng tham khảo để biết thêm các nội dung chi tiết.

Bài XỬ LÝ DỮ LIỆU VỚI ADO.NET I Tìm hiểu ADO.NET Hầu hết ứng dụng hay website cần phải có sở liệu, để lưu trữ liệu, xử lý thông tin đưa báo cáo, hỗ trợ tìm kiếm… Khi liệu trở thành trung tâm ứng dụng cung cấp chức tới người dùng phụ thuộc vào khả thao tác liệu, vấn đề mà người thiết kế người xây dựng ứng dụng quan tâm sử dụng liệu là: • Lưu liệu tập trung • Đảm bảo tồn vẹn liệu • Đảm bảo khả truy xuất đồng thời nhiều người dùng liệu • Đảm bảo thời gian hồi đáp ngắn cho người dùng • Bảo mật liệu • Trao đổi liệu hệ thống khác Những vấn đề giải dựa vào khả hệ quản trị sở liệu(HQT CSDL) phần mềm xử lý liệu HQT CSDL cung cấp .Net truy xuất liệu qua ADO.NET, đặc điểm ADO.NET khả làm việc với liệu không kết nối, liệu lưu trữ nhớ csdl thu nhỏ gọi dataset, nhằm tăng tốc độ tính tốn, xử lý tính tốn hạn chế sử dụng tài nguyên Database Server Đặc điểm quan trọng thứ khả xử lý liệu chuẩn XML, liệu dạng XMl trao đổi hệ thống nên ứng dụng bạn có nhiều khả làm việc với nhiều ứng dụng khác Kiến trúc ADO Net Kiến trúc ADO.NET chia làm phần chính: - Managed Provider Component: bao gồm đối tượng DataAdapter, DataReader,… giữ nhiệm vụ làm việc trực tiếp với liệu database, file,… - Content Component: bao gồm đối tượng DataSet, DataTable,… đại diện cho liệu thực cần làm việc o DataReader đối tượng mới, giúp truy cập liệu nhanh chóng forward-only read-only giống ADO RecordSet sử dụng Server cursor, OpenFowardOnly LockReadOnly Trang 86 o DataSet đối tượng mới, khơng liệu, DataSet coi gọn nhẹ CSDL nhớ với nhiều bảng mối quan hệ o DataAdapter đối tượng kết nối DataSet CSDL, bao gồm đối tượng Connection Command để cung cấp liệu cho DataSet cập nhật liệu từ DataSet xuống CSDL Minh họa tạo kết nối sở liệu using System; using System.Data; using System.Data.SqlClient; public partial class vd1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //Khai báo khởi tạo biến Connection SqlConnection cnn = new SqlConnection("Data Source=(local); Initial Catalog=QLbansach;User ID=sa;Password="); //Mở kết nối cnn.Open(); //Command điều khiển truy vấn sql SqlCommand cmd = cnn.CreateCommand(); cmd.CommandText = "select HotenKH from Khachhang where MaKH=5"; //lấy chuỗi giá trị sở liệu string result = (string)cmd.ExecuteScalar(); //đóng kết nối cnn.Close(); //in giá trị hình Response.Write(result); } } Thi hành Cơ bƣớc thực với database • Bước 1: Tạo kết nối • Bước 2: Mở kết nối liệu • Bước 3: Tạo lệnh điều khiển truy vấn SQL • Bước 4: Thực thi lệnh • Bước 5: Đóng kết nối • Bước 6: in kết II Các đối tƣợng ADO.Net Trang 87 Đối tƣợng Connection Vai trò Connection ADO.net tạo kết nối ứng dụng với nguồn liệu(CSDL) Data Provider : o System.Data.Oledb : Sử dụng với Access o System.Data.SqlClient : Sử dụng với SQLServer Ứng với tên miến ta có connection tương ứng: o System.Data.Oledb.OledbConnection o System.Data.SqlClient.SqlConnection Ngòai Ado.net hỗ trợ Data Provider khác o System.data.OcracleClient : Dành cho Ocracle o MicroSoft.data.Odbc : Dành cho dạng kết nối thong qua Odbc Connectionủa Hệ điều hành o Microsoft.Data.Sqlxml: Dành cho XML Sqlserver Connection String Trước thực kết nối Connectionần khai báo thong tin cho Connection thông qua thuộc tính Connection String Cách khai báo thay đổi tùy thuộc vào Data Provider Gồm có thành phần sau: o Nếu kết nối với CSDL Access Provider: Khai báo Data Provider Connectionủa Hệ QT CSDL Access Data Source: Nguồn liệu (Tên CSDL.mdb) User ID: Tên người dùng Password : Mật Ví dụ: Tạo kết nối với CSDL Access using System; using System.Data; using System.Data.OleDb; public partial class VD2 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //Khai báo khởi tạo biến Connection String StrCnn="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Server.MapPath("~/App_Data/QLBansach.mdb"); OleDbConnection cnn = new OleDbConnection (StrCnn); //Mở kết nối cnn.Open(); //Command điều khiển truy vấn sql OleDbCommand cmd = cnn.CreateCommand(); cmd.CommandText = "select HotenKH from Khachhang where MaKH=2"; //lấy chuỗi giá trị sở liệu string result = (string)cmd.ExecuteScalar(); //đóng kết nối cnn.Close(); //in giá trị hình Response.Write(result); } } o Nếu kết nối với CSDL SQLServer Trang 88 Provider: Khai báo Data Provider Connectionủa Hệ QT CSDL SQLServer Data Source:Tên máy cài đặt SQLServer Initial Catalog: Tên CSDL User ID: Tên người dùng Password : Mật Các thuộc tính Của Connection o DataBase: : Tương ứng với Initial Catalog(SQL) hay tên CSDL muốn làm việc (Access) o DataSource: Tương ứng với DataSource Tên máy SQL hay tên CSDL o Provider: Tương ứng với Provider o State: Tình trạng kết nối Connectionủa Connection với giá trị Broken: Kết nối bị ngắt xảy sau kết nối Closed: Kết nối đóng Connecting: Đang kết nối Executing: Kết nối thực lệnh Fetching: Kết nối truy xuất liệu Open: Kết nối mở Các phƣơng thức Change Databse: Thay đổi DataBase làm việc Close : Đóng kết nối sử dụng đóng Connection mở Dispose: Xóa tịan tài ngun liên quan đấn Connection vùng nhớ Open: Thực kết nối Connectionới thông tin khai báo ConnectionString Ví dụ: Kiểm tra kết nối với CSDL SQLServer protected void Button1_Click(object sender, EventArgs e) { //Khai báo khởi tạo biến Connection SqlConnection cnn = new SqlConnection("Data Source=;Initial Catalog=QLbansach;User ID=sa;Password="); //Mở kết nối cnn.Open(); TextBox1.Text = "State = " + cnn.State; ; // Thực câu lệnh SELECT, INSERT, DELETE, UPDATE cnn.Close(); //Đóng kết nối } Đối tƣợng Command Sau tạo kết nối với nguồn liệu, thao tác với nguồn liệu thực thông qua Command Tùy theo loại Connection đối tượng Command thuộc tên miền sau: Trang 89 System.Data.OleDb.OleDbCommand System.Data.SqlClient.SqlCommand Tạo Command Chúng ta tạo Command thông qua đối tượng Connection bàng cách: As New ; .Connection=; .CommandText=; Hoặc As New Command(); .Connection=; Các thuộc tính CommandText : Lệnh SQL hay tên Stored Procedure muốn thực nguồn liệu CommandType: Giá trị cho biết nội dugn Commandtext gì: Text: (Mặc định) câu lệnh SQL StoredProcedure: Tên thủ tục TableDirect: Tên Connectionủa table VD: SqlCommand cmd As SqlCommand = New SqlCommand(); cmd.Connection = cnn; cmd.CommandType = CommandType.Text; cmd.CommandText = "Select* From Khachhang Where MaKH=2"; Parameters Lệnh SQL commandText sử dụng dấu ? thay cho trị chưa xác định thực dùng đối tượng Parameters để truyền gái trị vào dấu ? Tùy theo Command Parameter khai báo từ lớp OledbParameter hay SqlParameter Cú pháp khai báo sau: OleDbParameter | SqlParameter As New OleDbParameter | SqlParameter(); OleDbParameter | SqlParameter As New OleDbparameter | SqlParameter(); OleDbParameter | SqlParameter As New OleDbParameter | SqlParamter(,); Các thuộc tính cần ý: Direction : Giá trị cho biết lọai tham số Input: (mặc định) Loại tham số đầu vào InputOutput: Loại tham số đầu vào Output: Loại tham số đầu ReturnValue: Loại tham số nhận giá trị trả Connectionủa thủ tục OleDbType / SqlDbType: Kiểu liệu OleDb hay SQLDb Connectionủa tham số ParameterName: Tên tham số Value: Giá trị tham số Trang 90 Dùng phƣơng thức CreateParameter Add Command tập hợp Parameters VD: Khi sử dụng OleDbCommand cmd.CommandText=”Select * From Khachhang Where MaKH=?”; OleDbParameter Par As OleDbParameter= cmd.CreateParameter(); Par.Value=”KH01”;; cmd.Parameters.Add(Par); VD: Khi sử dụng SqlDbCommand cmd.CommandText=”Select * From Khachhang Where MaKH=@MaKH”; SqlParameter Par As SqlParameter = cmd.CreateParameter(); Par.ParameterName=”@MaKH”; Par.Value=”KH01”; cmd.Parameters.Add(Par); Đƣa tham số vào tập hợp Parameters VD: Khi sử dụng OleDbCommand cmd.CommandText=”Select * From BangDiem Where Masv=? And MaMH=?”; OleDbParameter Par1 As OleDbParameter= cmd.CreateParameters.Add(“Sinhvien”,OleDbType.Char,4); Par1.Value=”SV01” OleDbParameter Par2 As OleDbParameter= cmd.CreateParameters.Add(“Monhoc”,OleDbType.Char,4); Par2.Value=”MH01” VD: Khi sử dụng SqlDbCommand cmd.CommandText=”Select * From BangDiem Where Masv=@MaSV and MaMH = @MaMH ”; SqlDbParameter Par1 As SqlDbParameter= cmd.CreateParameters.Add(“@MaSV”,SqlType.Char,4); Par1.Value=”SV01” SqlDbParameter Par2 As SqlDbParameter= cmd.CreateParameters.Add(“@MaMH”,SqlType.Char, 4); Par2.Value=”MH01”; Tạo tham số đƣa vào tập hợp Parameters VD: Procedure SpKetQuaThi Cần tham số đầu vào: @MaSV , @MaMH trả Điểm thi Môn học Connectionủa sinh viên Vì Connectionần truyền tham số: trả về, đưa vào Tham số trả phải truyền cho Command trước tiên cmd.CommandText=”spKetQuaThi”; cmd.CommandType=CommandType.StoredProcedure; OleDbParameter ts3 As New OleDbParameter(); ts3.Direction=ParameterDirection.ReturnValue; Trang 91 ts3.OleDbType=OleDn.OleDbType.Int; cmd.parameters.Add(ts3); OleDbParameter ts1 as OleDbParameter= cmd.Parameters.Add(“@MaSV”,OleDbType.Char,4); Ts1.Value=”Sv01”; OleDbParameter ts2 as OleDbParameter= cmd.Parameters.Add(“@MAMH”,OleDbType.Char ,4); Ts1.Value=”MH01”; Thực Command Phƣơng thức ExecuteReader: Phương thức trả đối tượng DataReader để đọc liệu lần dòng với phương thức Read DataReader đọc liệu trực tiếp từ nguốn liệu nên phải trì kết nối đến đọc xong cú pháp SqlDataReader As SqlDataReader; = .ExecuteReader; VD: SqlDataReader reader As SqlDataReader; reader = cmd.ExecuteReader; Phƣơng thức ExcuteNoneQuery: Dùng để thực thi phát biểu T-Sql như: Insert, Update, Delete, Create,… Phƣơng thức ExcuteScalar: Trả từ phát biết SQL dạng Select có cột hàng Đối tƣợng Datareader Là đối tượng truy cập liệu trực tiếp, sử dụng trỏ phía Server trì kết nối với Server suốt trình đọc liệu, DataReader thuộc tên miền System.data.OleDbDatReader System.Data.SqlDataRaeder Các thuộc tính FieldCout: Số Connectionột dòng hành DataReader IsClosed : Cho biết dataReader đóng Item:Trị cột truyền vào Tham số truyền vào tên cột số thứ tự từ Các phƣơng thức Close: Đóng DataReader GetFieldType: Trả kiểu liệu cột truyền vào GetName: Trả tên cột truyền vào GetValue: Tar3 trị cột truyền vào Read : Di chuyển đến dòng trả true dòng để di chuyển, ngược lại trả False Trong dataReader mở thao tác liệu nguồn liệu khơng thể dataRaeder đóng lại lệnh Close Đối tƣợng DataAdapter Để lầy liệu từ nguồn liệu cho ứng dụng, sử dụng đối tượng gọi DataAdapter Đối tượng cho phép ta lấy cấu trúc liệu bảng nguồn liệu DataAdapte gồm đối tượng: Trang 92 - SelectCommand: Cho phép lấy thông tin từ nguồn liệu - InsertCommand cho phép thêm liệu vào bảng nguồn liệu - UpdateCommand cho phép điều chỉnh liệu bảng nguồn liệu - DeleteCommand cho phép xóa liệu bảng nguồn liệu a Tạo DataAdapter Khai báo rõ DataAdapter sử dụng theo DataProvider nào: sqlDataAdapter hay OledbDataAdapter hai lớp thuộc tên miền: System.Data.OleDb.OleDbDataAdapter System.Data.SqlClient.SqlDataAdapter Cú pháp tạo DataAdapter New DataAdapter(); New DataAdapter(); : Có sẳn với nội dụng lệnh truy xuất New DataAdapter(,) DataAdapter thao tác với nguồn liệu qua đối tượng connection kết nối, Connection chưa mở DataAdapter tự động mở kết nối cần đóng lại VD: OleDbDataAdapter DA As New OleDbDataAdapter(); DA.SelectCommand.CommandText=”Select * From Sinhvien”; AD.SelectCommand.Connection.ConnectionString=”Provider=MicroSoft.Jet.OleDb.4.0; Data Source=c:\QuanLySV.mdb”; b Các thuộc tín DataAdapter DeleteCommand : Đối tượng Command chứa nội dung lệnh hủy mẫu tin nguồn liệu InsertCommand : Đối tượng Command chứa nội dung lệnh thêm mẫu tin nguồn liệu SelectCommand: Đối tượng Command chứa nội dung lệnh truy xuất mẫu tin nguồn liệu UpdateCommand : Đối tượng Command chứa nội dung lệnh sửa mẫu tin nguồn liệu c Các chức DataAdapter - Lấy liệu từ nguồn: Sử dụng DataAdapter để lấy liệu cho đối tượng o DataTable: Fill() o DataSet: Fill() Dữ liệu lấy DataSet dạng dataTable với tên mặc định là: Table,Table1, Table2 .: o Đổ liệu vào Datset cho bảng DataTable chưa có tạo mới: Fill(,) - Phương thức trả mẫu tin lấy Trang 93 Dim DS as New Dataset() Dim so As Integer so= DA.Fill(DS,”Sinhvien ”) - Để cập nhật liệu nguồn Update(): Cập nhật dòng (Các đối tượng DataRow) vào nguồn liệu Update(): Cập nhật thay đổi tất bảng Dataset vào nguồn liệu Update(): Cập nhật tất thay đổi DataTable vào nguồn liệu Update(,) Cập nhật they đổi bảng Dataset vào nguồn liệu Đối tƣợng DataSet Dataset mơ hình CSDL quan hệ thu nhỏ đáp ứng nhu cầu ứng dụng Dataset chứa bảng (DataTable) quanhệ (DataRelation) ràng buộc (constraint) Dataset thuộc tên miền: System.Data.Dataset a Khai báo New System.Data.Dataset() Hoặc New System.Data.Dataset() b Các phƣơng thức - Thêm bảng vào Dataset Tables.Add() Một bảng tự động tạo với tên mặc định Table1, Table2 Tables.Addd() Một bảng tạo theo Ghi chú: Tên bảng có phân biệt chữ in, thường - Xóa bảng khỏi Dataset Tables.Remove() Xóa bảng khỏi tập hợp Table - Kiểm tra bảng có thuộc Dataset Tables.Contains() - Lấy số bảng Tables.IndexOf() - Lấy số bảng Dataset Tables.Count - Lấy bảng Dataset Tables() - Để cập nhật thay đổi Dataset AcceptChanges() - Để hủy thay đổi Dataset Trang 94 RejectChanges() - Để xóa bỏ liệu dataSet Clear() - Để tạo sau Dataset Clone() - Để xóa bỏ Dataset Gọi phương thức Dispone để giải phóng tài nguyên vùng nhớ Dataset sử dụng - Tạo quan hệ hai bảng Dataset Relations.Add(,) - Xóa quan hệ hai bảng Dataset Relations.Remove() Đối tƣợng Datatable Dữ liệu bảng nguồn liệu lấy đưa vào DataTable DataTable thuộc tên miền : System.Data.dataTable Cú pháp: New DataTable(); New DataTable(); DataTable hình thành từ DataColumn, DataRow III Một số minh họa Kết nối sở liệu protected void Button1_Click(object sender, EventArgs e) { //Khai báo khởi tạo biến Connection SqlConnection cnn = new SqlConnection("Data Source=(local); Initial Catalog=QLbansach;User ID=sa;Password="); //Mở kết nối cnn.Open(); // Thực câu lệnh SELECT, INSERT, DELETE, UPDATE TextBox1.Text = "State = " + cnn.State; //Đóng kết nối cnn.Close(); } Kết nối, thao tác liệu, sử dụng đối tượng Command với câu lệnh SELECT Trang 95 Điều khiển lƣới sau đƣợc tùy biến cột Phái I.4.2 Giai đoạn 2: Xử lý Khác với Bound column, cột kiểu Template column không tự động hiển thị liệu Mà hiển thị liệu thân điều khiển (mới tạo thiết kế) khơng có qui định field cần hiển thị từ nguồn liệu Do đó, để hiển thị liệu (theo ý đồ chúng ta), ta phải viết lệnh xử lý kiện ItemDataBound Mã lệnh xử lý: (1)Private Sub dtgKhach_hang_ItemDataBound(…,e …) … (2) If e.Item.ItemIndex < Then Exit Sub (3) Dim chkPhai As CheckBox (4) chkPhai = e.Item.FindControl("chkPhai") (5) chkPhai.Checked = e.Item.DataItem("Gioi_tinh") (6)End Sub Trước vào tìm hiểu lệnh xử lý đoạn lệnh trên, nên tìm hiểu ý nghĩa kiện ItemDataBound DataGrid Sự kiện ItemDataBound xảy phương thức DataBind gọi (lẽ đương nhiên ta phải gán nguồn liệu cho lưới trước đó) Ứng với dòng liệu xảy kiện ItemDataBound tương ứng Phân tích xử lý đoạn lệnh trên: Dòng lệnh (2): Dòng lệnh kiểm tra xem lần xảy kiện có phải dành cho dịng liệu hay khơng Tại cần phải kiểm tra điều kiện này? Bởi khơng ứng với dịng liệu, mà cịn có dịng Header, Footer Pager, … xảy kiện chkPhai Để biết lần xảy kiện dành cho dòng nào, kiềm tra giá trị thuộc tính e.Item.ItemType Thuộc tính có giá trị sau: Các giá trị thuộc tính ItemType AlternatingItem: Xảy ứng với dịng liệu có số lẻ (dịng liệu tính từ 0) EditItem: Ứng với dòng trạng thái hiệu chỉnh liệu Footer: Ứng với dòng tiêu đề Header: Ứng với dòng tiêu đề Item: Xảy ứng với dòng liệu có số chẳn Pager: Ứng với dịng phân trang SelectedItem: Ứng với dòng trạng thái chọn Seperator: Ứng với dòng phân cách Bên cạnh đó, ta quan tâm đến lần xảy kiện có phải dịng liệu hay khơng, ta sử dụng thuộc tính e.ItemIndex e.Item.ItemIndex < 0: Đây khơng phải dịng liệu e.Item.ItemIndex >= 0: Đây dòng liệu Giá trị thuộc tính cho biết số dịng liệu hành Dịng lệnh (3,4): Nhiệm vụ dòng lệnh khai báo điều khiển ứng với Trang 113 điều khiển đặt vào lúc thiết kế Sử dụng phương thức e.Item.FindControl() để lấy điều khiển có dịng xảy kiện chkPhai = e.Item.FindControl("chkPhai") 'hay chkPhai =Ctype(e.Item.FindControl("chkPhai"),CheckBox) Bảng KHACH_HANG Dòng lệnh (5): Sau lấy điều khiển ứng với dòng xảy kiện, tùy theo liệu mà ta hiển thị lên điều khiển giá trị tương ứng Để lấy liệu dịng hành, ta sử dụng thuộc tính e.Item.DataItem() chkPhai.Checked = e.Item.DataItem("Gioi_tinh") Kết hiển thị Đối với xử lý phức tạp, kiện ItemDataBound lựa chọn hàng đầu việc tùy biến hiển thị liệu Tuy nhiên, xử lý đơn giản, thực liên kết liệu trình thiết kế Chọn Edit Template cột Phái, chọn điều khiển chkPhai Chọn điều khiển chkPhai lúc thiết kế Trên cửa sổ thuộc tính, chọn (DataBindings) Chọn chức DataBidings Trên cửa sổ thuộc tính, chọn (DataBindings) Hộp thoại DataBindings điều khiển chkPhai xuất Các thuộc tính liên kết liệu điều khiển xuất Danh sách bên trái hộp thoại Chọn thuộc tính cần liên kết, chọn loại liên kết Custom binding expression, nhập chuỗi liên kết liệu điều khiển bên theo cú pháp: Container.DataItem("Tên field") Ở ví dụ này, thực liên kết thuộc tính Checked điều khiển chkPhai với field Gioi_tinh có nguồn liệu lưới I.5 Cập nhật liệu trực tiếp lƣới Cập nhật liệu trực tiếp lưới ASP.Net hỗ trợ tốt giao diện Công việc lại thiết kế nút lệnh như: Chọn, Sửa/Ghi - Không, Hủy, … viết lệnh cập nhật liệu I.5.1 Giai đoạn thiết kế Trong cửa sổ thuộc tính lưới, tạo nút lệnh cần thiết hỗ trợ cho việc cập nhật liệu Ở ví dụ này, tạo nút (Select - chọn), (Edit, Update, Cancel - Sửa, Ghi, Không) (Delete - Hủy) Đối với nút lệnh trên, bạn cần ý đến giá trị thuộc tính Command name Ứng với nút lệnh có giá trị CommandName khác nhau, nhờ đó, ta viết lệnh xử lý với chức tương ứng chọn Trang 114 Select: Command name = "Select" Edit, Update/Cancel: Command name = "Edit", "Update"/"Cancel" Delete: Command name = "Delete" Tạo nút lệnh Thêm - Sửa/Ghi/Không - Hủy Tìm hiểu thuộc tính Command Name Cũng cần bàn thêm chút thuộc tính Command Name Như bạn biết, nút lệnh (Chọn, Thêm - Sửa / Ghi / Không - Hủy) VS.Net hỗ trợ, giá trị thuộc tính CommandName nút lệnh giá trị mặc định qui định sẵn Ứng với CommandName mặc định, có kiện để ta thực xử lý tương ứng: Command name="Edit" Sự kiện EditCommand Command name="Update" Sự kiện UpdateCommand Command name="Cancel" Sự kiện CancelCommand Command name="Delete" Sự kiện DeleteCommand Chắc hẳn bạn thắc mắc khơng có kiện SelectCommand? Bốn kiện liệt kê kiện dành riêng, tương ứng với giá trị Command name mặc định Edit, Update, Cancel, Delete Đối với CommandName có giá trị khác, sử dụng kiện dành chung cho tất nút lệnh có thuộc tính CommandName (Button, Linkbutton, ImageButton) đặt lưới - kiện ItemCommand Tại vậy? Vì ta đặt nút lệnh vào lưới (sử dụng cột Template column), chúng (các nút lệnh) khơng cịn kiện Click nữa, thay vào đó, tất nút lệnh nhấn gây kiện ItemCommand Dựa vào giá trị e.CommandName (tham số kiện) để xác định nút lệnh nhấn Cũng cần lưu ý thêm nút lệnh nhấn gây kiện ItemCommand Do đó, nút lệnh có giá trị thuộc tính CommandName Edit, Update, Cancel, Delete nhấn gây kiện ItemCommand trước gây kiện dành riêng cho chúng Giao diện lƣới sau thêm nút lệnh I.5.2 Giai đoạn xử lý Xử lý chọn mẩu tin Chọn mẫu tin lƣới Private Sub dtgKhach_hang_ItemCommand(…, e …) … If e.CommandName = "Select" Then dtgKhach_hang.SelectedIndex = e.Item.ItemIndex Lien_ket_du_lieu() End If End Sub Trang 115 Xử lý sửa, ghi, không Muốn cập nhật liệu, ta cần xác định khách hàng cập nhật thông qua Mã khách hàng Để lấy Mã khách hàng: Gán thuộc tính DataKeyField điều khiển lưới = "MKH" .DataKeys() Trả Mkh dòng Chọn mẫu tin để cập nhật liệu Private Sub Page_Load(…) … If Not IsPostBack Then dtgKhach_hang.DataKeyField = "MKH" Lien_ket_du_lieu() End If End Sub Private Sub dtgKhach_hang_EditCommand(…, e …) … dtgKhach_hang.EditItemIndex = e.Item.ItemIndex Lien_ket_du_lieu() End Sub Private Sub dtgKhach_hang_UpdateCommand(…, e …) … 'Khai báo khởi tạo biến kết nối: cnKet_noi 'Lấy liệu mà người dùng vừa cập nhật Dim lHo_kh As TextBox = e.Item.Cells(0).Controls(0) Dim lTen_kh As TextBox = e.Item.Cells(1).Controls(0) Dim lPhai As CheckBox = e.Item.FindControl("chkPhai") Dim lMkh As Integer = dtgKhach_hang.DataKeys(e.Item.ItemIndex) 'Tạo đối tượng Command để cập nhật liệu Dim cmdLenh As New OleDbCommand cmdLenh.Connection = cnKet_noi cmdLenh.CommandText = "Update KHACH_HANG " & _ "Set Ho_khach_hang=?, Ten_khach_hang=?, " & _ "Gioi_tinh=? Where MKH=?" 'Truyền tham số cho đối tượng Command cmdLenh.CommandType = CommandType.Text cmdLenh.Parameters.Add("Ho_kh", lHo_kh.Text) cmdLenh.Parameters.Add("Ten_kh", lTen_kh.Text) cmdLenh.Parameters.Add("Phai", lPhai.Checked) cmdLenh.Parameters.Add("Mkh", lMkh) 'Thi hành Command cnKet_noi.Open() Trang 116 cmdLenh.ExecuteNonQuery() cnKet_noi.Close() 'Tắt chế độ cập nhật liệu dtgKhach_hang.EditItemIndex = -1 'Hiển thị liệu cập nhật lên lưới Lien_ket_du_lieu() End Sub Private Sub dtgKhach_hang_CancelCommand(…, e …) … dtgKhach_hang.EditItemIndex = -1 Lien_ket_du_lieu() End Sub Hiệu chỉnh độ rộng Textbox dịng trạng thái sửa Bạn bổ sung đoạn lệnh sau (trong kiện ItemDataBound) để hiệu chỉnh độ rộng Textbox dòng trạng thái sửa If e.Item.ItemType = ListItemType.EditItem Then CType(e.Item.Cells(0).Controls(0),TextBox).Width = New Unit(133) CType(e.Item.Cells(1).Controls(0), TextBox).Width = New Unit(63) End If Xử lý hủy mẫu tin Private Sub dtgKhach_hang_DeleteCommand(…, e …) … 'Thực xóa dịng liệu 'Xử lý tương tự Update Command 'Hiển thị liệu cập nhật lên lưới Lien_ket_du_lieu() End Sub II Điều khiển DataList II.1 Sử dụng DataList để hiển thị liệu Như điều khiển DataGrid, điều khiển DataList sử dụng để hiển thị liệu Tuy nhiên, DataList, phải tự thiết kế hình thức hiển thị liệu (giống Template Column DataGrid) Huy Cận Về Tác Giả Và Tác Phẩm NXB: Giáo dục Cuốn Huy Cận Về Tác Gia Và Tác Phẩm tập hợp nghiên cứu, phê bình nhà văn, nhà thơ, cán giảng dạy, nhà nghiên cứu phê bình văn học, nhà nghiên cứu văn hóa nước ngồi cơng bố sách, báo, tạp chí Các viết xếp theo thứ tự thời gian chủ đề, để bạn đọc hình Trang 117 Giá: 45,500.00 VND [Đặt hàng] [Xem Tiếp] Địa Chất Cơng Trình (Giáo Trình Dùng Cho Sinh Viên Ngành Xây Dựng Cầu Đƣờng) NXB: Giao thông vận tải Địa chất cơng trình mơn đưa vào chương trình đào tạo kỹ sư ngành Xây dựng cầu đường trường Đại học GTVT từ lâu Những hiểu biết địa chất cơng trình giúp ích nhiều cho kỹ sư cầu đường khảo sát, thiết kế thi cơng cơng trình giao thơng Giá: 14,000.00 VND [Đặt hàng] [Xem Tiếp] Sử dụng DataList hiển thị thơng tin sách Một số thuộc tính cần ý DataList RepeatDirection: Qui định hướng hiển thị liệu Horizontal: Hiển thị liệu theo chiều ngang RepeatDirection = Horizontal Vertical (mặc định): Hiển thị liệu theo chiều đứng RepeatDirection = Vertical RepeatColumns: Qui định số cột hiển thị DataList L'Enquête Corse Đặt mua Unspeakable Đặt mua Bottle Rocket Đặt mua Ripper Đặt mua Enduring Love Đặt mua The Good Thief Đặt mua RepeatColumns = Thiết kế hình thức hiển thị cho DataList tương tự thiết kế cho cột Template Column DataGrid Chọn Edit Template | ItemTemplate từ thực đơn ngữ cảnh để thực thiết kế hình thức hiển thị cho DataList Chọn chức thiết kế cho DataList Trang 118 Trong q trình thực hành, để cơng việc thiết kế dễ dàng, bạn thực thiết kế bên điều khiển DataList Sử dụng Table (thực đơn Insert Table) để định vị trí hiển thị điều khiển Sau hồn tất cơng việc thiết kế, kéo kết thiết kế vào vị trí cần hiển thị DataList Ví dụ: Hiển thị thông tin sách với DataList Thiết kế thông tin sách với DataList Như cột Template Column DataGrid, xử lý hiển thị liệu cho DataList viết kiện ItemDataBound Xử lý nhấn Button đặt DataList viết kiện ItemCommand Private Sub Page_Load(…, e …) Handles MyBase.Load If Not IsPostBack Then Lien_ket_du_lieu() End If End Sub Public Sub Lien_ket_du_lieu() dtSach = Doc_danh_sach_Sach() dtlSach.DataSource = dtSach dtlSach.DataKeyField = "Ms" dtlSach.DataBind() End Sub Private Sub dtlSach_ItemDataBound(…, e …) … Dim lDong as Integer = e.Item.ItemIndex If lDong < Then Exit Sub 'Hiển thị Tên sách Dim lnkTs As LinkButton lnkTs = e.Item.FindControl("lnkTen_sach") lnkTs.Text = e.Item.DataItem("Ten_sach") 'Hiển thị thơng tin mơ tả tóm tắt nội dung Label HyperLink LinkButton Tài liệu hướng dẫn giảng dạy Học phần - Lập trình ứng dụng web với ASP.NET Trang 82/174 Dim lblMt As Label Trang 119 lblMt = e.Item.FindControl("lblMo_ta") lblMt.Text = Left(e.Item.DataItem("Mo_ta"), 200) & " " 'Hiển thị hình ảnh minh họa Dim hplHinh As HyperLink hplHinh = e.Item.FindControl("hplHinh_mh") hplHinh.ImageUrl = " /Data_Pic/" & e.Item.DataItem("Hinh_minh_hoa") 'Hiển thị giá bán sách Dim lblGia As Label lblGia = e.Item.FindControl("lblGia_ban") lblGia.Text = e.Item.DataItem("Don_gia") End Sub Kết hiển thị thông tin sách trang Web Kết trang Web Tài liệu hướng dẫn giảng dạy Học phần - Lập trình ứng dụng web với ASP.NET Trang 83/174 II.2 Cập nhật liệu với DataList Ngoài việc hiển thị liệu, DataList hỗ trợ thao tác cập nhật liệu Để thực chức cập nhật liệu với DataList, cần phải thiết kế thêm vùng EditIemTemplate cho DataList (xem hình) II.2.1 Các bƣớc xử lý a Thiết kế Thiết kế vùng ItemTemplate EditItemTemplate Thực thao tác liên kết liệu cho điều khiển vùng EditItemTemplate thơng qua cửa sổ thuộc tính tương tự ItemTemplate Chú ý: Chúng ta hồn tồn thực việc liên kết liệu kiện ItemDataBound Chọn chức DataBindings cho ô Đơn giá Liên kết liệu với cột Don_gia Yêu cầu thiết kế Tên điều khiển Thiết lập thuộc tính Hieu_chinh: ImageButton CommandName: Edit Ghi_nhan: ImageButton CommandName: Update CommandArgument: DataBinder.Eval(Container, "DataItem.Ms") Lưu lại mã số sách hiệu chỉnh Bo_qua: ImageButton CommandName: Cancel Tài liệu hướng dẫn giảng dạy Học phần - Lập trình ứng dụng web với ASP.NET Trang 85/174 b Xử lý lệnh để cập nhật liệu Trang 120 Xử lý kiện EditCommand, CancelCommand, UpdateCommand để thực hiện/bỏ qua việc thay đổi liệu Private Sub Page_Load(…, e …) Handles MyBase.Load 'Put user code to initialize the page here If Not IsPostBack Then Lien_ket_du_lieu() End If End Sub Private Sub dtlHang_hoa_EditCommand(…, e …) … dtlHang_hoa.EditItemIndex = e.Item.ItemIndex Lien_ket_du_lieu() End Sub Private Sub dtlHang_hoa_CancelCommand(…, e …) … dtlHang_hoa.EditItemIndex = -1 Lien_ket_du_lieu() End Sub Private Sub dtlHang_hoa_UpdateCommand(…, e …) … 'Xử lý cập nhật liệu Dim Don_gia_sua As TextBox Don_gia_sua = e.Item.FindControl("Don_gia_sua") 'Don_gia_sua.Text Trả đơn giá sửa '…… dtlHang_hoa.EditItemIndex = -1 Lien_ket_du_lieu() End Sub Tài liệu hướng dẫn giảng dạy Học phần - Lập trình ứng dụng web với ASP.NET Trang 86/174 DataList chế độ hiệu chỉnh III Điều khiển Repeater Như điều khiển DataList & DataGrid, điều khiển Repeater dùng để hiển thị liệu Tuy nhiên, để hiển thị liệu, phải tự thiết kế hình thức hiển thị thơng qua tag HTML Điều khiển Repeater có tag sau: (tùy chọn) Qui định hình thức hiển thị cho tiêu đề (Chỉ xuất lần, phía điều khiển) (Bắt buộc phải có) Qui định hình thức hiển thị cho mục liệu điều khiển (tùy chọn) Trang 121 Qui định hình thức hiển thị cho mục liệu điều khiển Nội dung qui định cặp tag hiển thị xen kẽ với nội dung cặp tag (tùy chọn) Qui định hình thức hiển thị dòng liệu (tùy chọn) Qui định hình thức hiển thị cho tiêu đề (Chỉ xuất lần, phía điều khiển) Ví dụ: Bước Tạo điều khiển Repeater: rptKhach_hang vào trang Web Điều khiển rptKhach_hang trang Web Bước Chuyển qua xem trang Web dạng HTML Bước Bổ sung tag sau Họ khách hàng Tên khách hàng Địa chỉ Điện thoại Trang 122 Bước Xem lại hình thiết kế Bước Tạo nguồn liệu cho điều khiển Private Sub Page_Load(…) Handles MyBase.Load 'Tạo liệu cho đối tượng DataTable: dtKhach_hang rptKhach_hang.DataSource = dtKhach_hang rptKhach_hang.DataBind() End Sub Trang 123 Bước Thi hành ứng dụng Tài liệu hướng dẫn giảng dạy Học phần - Lập trình ứng dụng web với ASP.NET Trang 90/174 IV Các ví dụ mở rộng IV.1 Xử lý đảo hƣớng xếp DataGrid Ví dụ minh họa xử lý đảo hướng xếp DataGrid Đồng thời, ví dụ này, chúng tơi thực liên kết liệu qua đối tượng DataView để thực xếp nguồn liệu Private Sub Page_Load(…, e …) Handles MyBase.Load If Not IsPostBack Then Lien_ket_du_lieu() End Sub Public Sub Lien_ket_du_lieu() Dim dtKhach_hang As DataTable = Doc_ds_khach_hang() Dim dvKhach_hang As New DataView(dtKhach_hang) dvKhach_hang.Sort = ViewState("SortExpression") If ViewState("SortAscending") = "false" Then dvKhach_hang.Sort &= " desc" End If dtgKhach_hang.DataSource = dvKhach_hang dtgKhach_hang.DataBind() End Sub Public Function Doc_ds_khach_hang() As DataTable Dim sKet_noi As String sKet_noi = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" & _ Server.MapPath(" \Data\QlBanSach.mdb") Dim cnKet_noi As New OleDbConnection(sKet_noi) Dim dsCSDL As New DataSet 'Mở đóng kết nối thực xong cnKet_noi.Open() Dim daBo_doc_ghi As New OleDbDataAdapter _ ("Select * From KHACH_HANG", cnKet_noi) cnKet_noi.Close() daBo_doc_ghi.Fill(dsCSDL, "KHACH_HANG") Return dsCSDL.Tables("KHACH_HANG") End Function Private Sub dtgKhach_hang_SortCommand(…, e …) … Dim sSap_xep As String = ViewState("SortExpression") Tài liệu hướng dẫn giảng dạy Học phần - Lập trình ứng dụng web với ASP.NET Trang 91/174 Trang 124 Dim sHuong As String = ViewState("SortAscending") ViewState("SortExpression") = e.SortExpression If (e.SortExpression = sSap_xep) Then ViewState("SortAscending") = IIf(sHuong = "false", "true", "false") End If Lien_ket_du_lieu() End Sub IV.2 Tạo biểu tƣợng xếp cột cho DataGrid Sắp xếp tăng dần theo tên khách hàng Private Sub dtgKhach_hang_ItemDataBound(…, e …) … If e.Item.ItemType = ListItemType.Header Then Dim sSap_xep As String = ViewState("SortExpression") Dim sHuong As String = ViewState("SortAscending") Dim sKy_hieu As String = IIf(sHuong = "false", " 6", " 5") Dim i% For i = To dtgKhach_hang.Columns.Count If sSap_xep = _ dtgKhach_hang.Columns(i).SortExpression Then Dim cell As TableCell = e.Item.Cells(i) Dim lblKy_hieu As New Label lblKy_hieu.Text = sKy_hieu lblKy_hieu.Font.Name = "webdings" lblKy_hieu.Font.Size = FontUnit.XSmall cell.Controls.Add(lblKy_hieu) End If Next End If End Sub IV.3 Định dạng hình thức hiển thị cho dòng liệu thỏa điều kiện DataGrid Trong ví dụ sau, thực tơ màu cho khách hàng có tên bắt đầu ký tự H Private Sub dtgKhach_hang_ItemDataBound(…, e …) … If e.Item.ItemIndex < Then Exit Sub Dim sTen_kh As String sTen_kh = e.Item.DataItem("Ten_khach_hang") 'Tiến hành kiểm tra điều kiện, 'nếu thỏa thực xử lý định dạng Trang 125 If sTen_kh.StartsWith("H") Then e.Item.BackColor = Color.LemonChiffon e.Item.Cells(1).Font.Bold = True End If End Sub Tơ màu khách hàng có tên bắt đầu ký tự H IV.4 Tạo hiệu ứng chọn rê chuột qua dòng liệu Private Sub dtgKhach_hang_ItemDataBound(…, e …) … If e.Item.ItemIndex < Then Exit Sub e.Item.Attributes("onMouseOver") = _ "this.style.backgroundColor='#FFF8DC'" e.Item.Attributes("onMouseOut") = _ "this.style.backgroundColor=''" End Sub Tạo hiệu ứng chọn dòng liệu lƣới Kinh nghiệm giảng dạy: Các điều khiển liên kết liệu (DataGrid, DataList, Repeater) hỗ trợ tốt việc hiển thị liệu trang web Do hỗ trợ nhiều chức năng, giáo viên nên hướng dẫn học viên sử dụng chức mà điều khiển hỗ trợ Sau nắm vững thao tác chức năng, học viên phối hợp chức lên tập Trang 126 TÀI LIỆU THAM KHẢO MSDN Library - April 2003 & MSDN Library - July 2005 MSDN Traning: Developing Microsoft ASP.NET Web Applications Using Visual Studio.NET MSDN Traning: Programming with Microsoft ADO.NET ASP.NET Web Developer’s Guide ASP.NET By Example [Steven A Smith] Developing Web Applications with Visual Basic NET and ASP.NET [John Alexander, Billy Hollis] Programming ASP.NET, 2nd Edition [Dan Hurwitz, Jesse Liberty] Inside ASP.NET [Scott Worley] ASP NET Bible [Mridula Parihar] 10 ASP.NET for Web Designers [Peter Ladka] 11 Professional ADO.NET Programming [Wrox] 12 Cascading Style Sheets - The Designer's Edge [Molly E Holzschlag ] 13 JavaScript Bible - Gold Edition [Danny Goodman] 14 Real World Web Services [Yasser Shohoud] 15 Trang chủ ASP.Net: http://www.asp.net 16 Trường học trực tuyến W3C: http://www.w3schools.com Trang 127 ... Kết hiển thị thông tin sách trang Web Kết trang Web Tài liệu hướng dẫn giảng dạy Học phần - Lập trình ứng dụng web với ASP.NET Trang 83/174 II .2 Cập nhật liệu với DataList Ngoài việc hiển thị... giảng dạy Học phần - Lập trình ứng dụng web với ASP.NET Trang 82/ 174 Dim lblMt As Label Trang 119 lblMt = e.Item.FindControl("lblMo_ta") lblMt.Text = Left(e.Item.DataItem("Mo_ta"), 20 0) & " " ''Hiển... CommandName: Cancel Tài liệu hướng dẫn giảng dạy Học phần - Lập trình ứng dụng web với ASP.NET Trang 85/174 b Xử lý lệnh để cập nhật liệu Trang 120 Xử lý kiện EditCommand, CancelCommand, UpdateCommand

Ngày đăng: 07/05/2021, 13:55

TỪ KHÓA LIÊN QUAN