Mục tiêu của giáo trình nhằm giúp các bạn có thể tạo các ứng dụng trên nền Windows; Tạo được các ứng dụng cơ sở dữ liệu trên nền Windows; Lập trình và sử dụng được các đối tượng của .NET; Tạo được ứng dụng cơ sở dữ liệu với các báo cáo bằng CrystalReport. Mời các bạn cùng tham khảo nội dung phần 2 sau đây!
Bài 4: Các đối tượng Windows Form Giới thiệu Thư viện Microsoft NET framework chứa tập phong phú lớp dùng để tạo ứng dụng Windows không gian tên System.Windows.Forms Các lớp điều khiển lớp Label, TextBox, Button, CheckBox, ListBox… đến điều khiển chuyên biệt MenuStrip, StatusStrip, ToolStrip Người đọc tìm thấy tất cơng cụ cần thiết để quản lý ứng dụng giao diện đa tài liệu MDI (Multiple Document Interface), tích hợp việc trợ giúp ngữ cảnh, tạo giao diện người dùng đa ngôn ngữ, kiểm tra liệu hợp lệ… Mục tiêu bài: Nhằm trang bị cho người học: - Kiến thức kỹ việc sử dụng đối tượng Form - Kiến thức kỹ việc lựa chọn kiện sử dụng cho phù hợp I/ Các điều khiển 1/ Nhãn (Label) Các điều khiển Label đặt chuỗi tĩnh Form, thường sử dụng để cung cấp chuỗi mô tả cho điều khiển khác Chuỗi đặt thuộc tính Text, canh lề thuộc tính TextAlign Thuộc tính string Text Mơ tả Truy cập hay thiết lập văn hiển thị Label label1.Text = "Hello"; bool AutoSize Truy cập hay thiết lập giá trị true rõ điều khiển tự động thay đổi kích thước theo chiều dài văn Label ContentAlignment TextAlign Truy cập hay thiết lập giá trị rõ canh lề văn Label bool AutoEllipsis Truy cập hay thiết lập giá trị true, chuỗi văn khơng vừa khít với Label, hiển thị dấu … cuối chuỗi Thuộc tính khơng có tác dụng thuộc tính AutoSize true BorderStyle BorderStyle Truy cập hay thiết lập kiểu viền điều khiển, enumeration BorderStyle gồm Fixed3D, FixedSingle None label1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; 47 bool UseMnemonic Truy cập hay thiết lập giá trị true, ký tự sau dấu & thuộc tính Text phím truy cập, nghĩa bạn sử dụng Alt + ký tự để chuyển focus đến Label Bảng 4.1 Các thuộc tính Nhãn 2/Nhãn liên kết (LinkLabel) LinkLabel nhãn đặc biệt kế thừa từ lớp Label, bổ sung số thuộc tính nhãn biểu diễn dạng liên kết Ví dụ, nhiều ứng dụng cung cấp liên kết đến website công ty cửa sổ About Bạn cần xử lý kiện LinkClicked để tạo chức liên kết cho nhãn liên kết Trong phương thức xử lý kiện này, thiết lập thuộc tính LinkVisited true để màu liên kết cập nhật thích hợp Sử dụng phương thức System.Diagnostics.Process.Start("URL") để hiển thị trang web với địa URL trình duyệt Ví dụ: linkLabel1.Text = "See http://www.google.com/"; linkLabel1.LinkArea = new LinkArea(4, 26); linkLabel1.LinkBehavior = LinkBehavior.HoverUnderline; private void linkLabel1_LinkClicked(Object sender, LinkLabelLinkClickedEventArgs e) { linkLabel1.LinkVisited = true; System.Diagnostics.Process.Start("http://www.google.com/"); } 3/ Nút lệnh (Button) Nút lệnh thực thao tác Mơ tả Thành viên void PerformClick() Phát sinh kiện click button FlatStyle FlatStyle Truy cập hay thiết lập giá trị kiểu button, enumeration System.Windows.Forms.FlatStyle Flat, Popup, Standard, System btnHienThi.FlatStyle = System.Windows.Forms.FlatStyle.Popup; FlatButtonAppearance FlatAppearance Truy cập hay thiết lập màu viền, kích thước nét viền, màu di chuyển mouse hay nhấn mouse nút lệnh FlatStyle FlatStyle button1.FlatAppearance.BorderColor = Color.LightSteelBlue; button1.FlatAppearance.MouseOverBackColor=Color.LightCyan; Thiết lập thuộc tính FlatStyle FlatStyle.Flat để thiết lập thuộc tính FlatAppearance có tác dụng: button1.FlatStyle=FlatStyle.Flat; Bảng 4.2 Các thành viên lớp Button 48 4/ Hộp văn (TextBox) TextBox cho phép người dùng nhập vào thông tin văn TextBox cung cấp tập tính định nghĩa sẵn mà người dùng truy cập thơng qua menu ngữ cảnh Hình 4.1 TextBox với menu ngữ cảnh Nhiều tính thuộc lớp TextBox số tính thuộc lớp sở TextBoxBase kế thừa lớp MaskedTextBox RichTextBox Mô tả Thành viên string Text Truy cập hay thiết lập văn hiển thị TextBox bool ReadOnly Truy cập hay thiết lập giá trị true, văn TextBox đọc bool ScrollBars Truy cập hay thiết lập giá trị true, hiển thị cuộn hộp nhập nhiều dòng bool Multiline Multiline truy cập hay thiết lập giá trị, true, cho phép nhập văn nhiều dòng vào TextBox bool AcceptsReturn bool WordWrap AcceptsReturn true, dịng chèn vào TextBox người dùng ấn phím Enter Khi bổ sung chuỗi nhiều dòng vào TextBox, ngăn cách dịng ký tự \r\n, ví dụ “Line1\r\nLine2” WordWrap true, cho phép cuộn dòng bool CanUndo Truy cập hay thiết lập văn TextBox phục hồi (undo) hay không void Cut(), Copy(), Paste(string text) Các phương thức cho phép chọn khối văn bản, hủy chọn chép, cắt văn vào nhớ, dán văn từ nhớ TextBox, phục hồi void Clear(), Undo() void Select(int start, int length) void SelectAll(), DeselectAll() 49 CharacterCasing CharacterCasing Truy cập hay thiết lập giá trị Lower, Normal, Upper thuộc enumeration CharacterCasing để chuyển văn TextBox thành chữ thường hay hoa string[] Lines Truy cập hay thiết lập mảng dòng TextBox int MaxLength Truy cập hay thiết lập số tối đa ký tự vào TextBox Giá trị mặc định nghĩa không giới hạn char PasswordChar PasswordChar truy cập hay thiết lập ký tự xuất TextBox, thay cho văn TextBox để che dấu thông tin textBox1.PasswordChar = „*‟; bool UseSystemPasswordChar UseSystemPasswordChar truy cập hay thiết lập giá trị true sử dụng ký tự mật định nghĩa hệ thống string SelectedText int SelectionLength int SelectionStart SelectionStart SelectionLength truy cập hay thiết lập vị trí bắt đầu kết thúc văn chọn hành TextBox SelectedText truy cập hay thiết lập văn chọn hành TextBox Bảng 4.3 Các thành viên lớp TextBox 5/ Hộp đánh dấu (CheckBox) nút lựa chọn (RadioButton) CheckBox RadioButton cung cấp thuộc tính Checked truy cập hay thiết lập giá trị kiểu bool rõ điều khiển chọn hay không Sau trạng thái thay đổi, kiện CheckedChanged phát sinh Bạn tạo CheckBox ba trạng thái đặc biệt cách thiết lập thuộc tính ThreeState true Thuộc tính CheckState truy cập hay thiết lập giá trị rõ điều khiển chọn, khơng chọn hay trạng thái trung gian (tơ bóng không chọn), giá trị thuộc enumeration CheckState Checked, Unchecked, Indeterminate Thuộc tính AutoCheck mặc định true, thay đổi trạng thái điều khiển người dùng kích vào điều khiển, false, ngăn cản người dùng thay đổi trạng thái điều khiển Nếu nhóm RadioButton thành nhóm điều khiển GroupBox, có RadioButton chọn nhóm Ví dụ: using System; using System.Windows.Forms; public partial class Form1 : Form { private void Form1_Load(object sender, EventArgs e) { rbred.Checked = true; } 50 private void rbred_CheckedChanged(object sender, EventArgs e) { this.BackColor = Color.Pink; } private void rbgreen_CheckedChanged(object sender, EventArgs e) { this.BackColor = Color.LightGreen; } private void rbblue_CheckedChanged(object sender, EventArgs e) { this.BackColor = Color.LightBlue; } } Hình 4.2: RadioButton II/ Các điều khiển nâng cao ListBox, ComboBox NET cung cấp ba điều khiển danh sách: ListBox, CheckedListBox ComboBox Chúng thừa kế từ lớp trừu tượng ListControl, định nghĩa tính sở cho phép sử dụng điều khiển danh sách để ràng buộc liệu Các điều khiển danh sách ràng buộc danh sách liệu DataSet, DataTable, mảng, ArrayList… thuộc tính DataSource string[] thanhPho = {"Đà nẵng","Huế","Sài gịn","Nha trang","Hà nội","Đà lạt"}; listBox1.DataSource = thanhPho; checkedListBox1.DataSource = thanhPho; Có thể truy cập hay thiết lập mục chọn hành sử dụng thuộc tính SelectedIndex để xác định số mục chọn hành, hay sử dụng thuộc tính Text, SelectedValue, SelectedItem để xác định mục chọn label1.Text = checkedListBox1.SelectedValue.ToString(); label1.Text = checkedListBox1.Text; label1.Text = checkedListBox1.SelectedItem.ToString(); listBox1.SelectedIndex = 0; Có thể chọn nhiều mục từ điều khiển danh sách, sử dụng tập SelectedIndices hay SelectedItems trả tập mục chọn Thuộc tính SelectionMode rõ 51 hộp danh sách chọn nhiều mục hay khơng, xác định giá trị thuộc enumeration SelectionMode: - MultiExtended: chọn nhiều mục cách nhấn giữ Ctrl hay Shift kích chọn mục để chọn nhiều mục - MultiSimple: chọn mục cách kích mouse chọn hay nhấn phím trống CheckedListBox không hỗ trợ Ctrl, Shift, cho phép nhiều mục chọn Thuộc tính CheckedIndices CheckedItems cung cấp thông tin mục chọn private void button1_Click(object sender, EventArgs e) { label1.Text = ""; foreach (string item in checkedListBox1.CheckedItems) label1.Text = label1.Text + item + " "; } Có thể truy cập tất mục điều khiển danh sách thuộc tính Items Tập Items cho phép thêm vào xóa mục danh sách checkedListBox1.CheckOnClick = true; checkedListBox1.Items.Add("Đà nẵng"); checkedListBox1.Items.Remove("Đà nẵng"); checkedListBox1.Items.RemoveAt(0); ComboBox hỗ trợ số thuộc tính mục chọn tập Items Kiểu ComboBox rõ thuộc tính DropDownStyle: - ComBoxStyle.DropDown: danh sách khơng giới hạn, người dùng vào thông tin tùy ý - ComboBoxStyle.DropDownList: cho phép chọn mục có sẵn danh sách III/ Image,ImageList 1/PictureBox PictureBox điều khiển để hiển thị hình ảnh Các thuộc tính thường dùng PictureBox sau: - Thuộc tính Image xác định hình ảnh cần hiển thị - Thuộc tính SizeMode thiết lập giá trị chọn từ enumeration PictureBoxSizeMode: 52 - AutoSize: PictureBox thay đổi kích thước image - CenterImage: image hiển thị PictureBox, image lớn PictureBox bị cắt phần xung quanh image - Normal: image đặt góc trái PictureBox, image bị cắt kích thước lớn PictureBox - StretchImage: image phóng to hay thu nhỏ vừa với kích thước PictureBox - Zoom: kích thước image tăng hay giảm theo PictureBox đảm bảo tỷ lệ chiều cao rộng image Ví dụ: pictureBox1.Image = System.Drawing.Image.FromFile("pic.bmp"); pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; 2/ ImageList Cơng dụng: Quản lý hình ảnh chứa điều khiển khác như: ListView, TreeView, ToolStrip,… Tạo ImageList: Chọn công cụ kéo thả vào form Các thuộc tính thường dùng: Thuộc tính Ý nghĩa Image Các hình quản lý ImageList - Khi chọn xuất cơng cụ Images Collection Editor, cho phép thêm, xố, xếp ảnh 53 IV/ListView, TreeView 1/ ListView - Dùng để hiển thị liệu theo dòng cột + Có thể chọn nhiều dịng + Có thể hiển thị biểu tượng theo dịng - Thuộc tính: Thuộc tính Ý nghĩa CheckBoxes Có/Khơng xuất checkbox dòng liệu Mặc định False Columns Các cột hiển thị chế độ Details FullRowSelect Chọn nhiều phân tử ListView GridLines Hiển thị lưới (Chỉ hiển thị chế độ Details) Items Mảng dòng ListView LargeImageList Danh sách ảnh dạng lơn hiển thị ListView SmailImageList Danh sách ảnh dạng nhỏ hiển thị ListView MultiSelect Có/Khơng cho phép chọn nhiều dòng Mặc định True SelectedItems Mảng dòng chọn View Kiểu hiển thị ListView Icons:Hiển thị danh sách theo biểu tượng 54 List: Hiển thị danh sách theo cột Details: Hiển thị ListView theo danh sách nhiều cột Phương thức: Phương thức Cơng dụng Add Thêm dịng vào ListView Clear Xóa tất dịng ListView Remove Xóa dịng ListView RemoveAt(index) Xóa dịng vị trí index Sự kiện thường dùng: ItemSelectionChanged: Xảy chọn dịng Ví dụ: Thiết kế form nhập, sửa, xóa liệu hình minh họa Cách thực hiện: Thiết kế Form đặt tên đối tượng - txtId, txtFirstName,txtLastName,txtAddress - btnNew, btnEdit,btnDelete,btnSave,btnCancel 55 Đặt thuộc tính cho ListView1 Columns: Thêm cột FullRowSelect: True GridLine: True MulitiSelect: False View: Details Xử lý kiện button private void btnNew_Click(object sender, EventArgs e) { txtId.Clear(); txtFirstName.Clear(); txtLastName.Clear(); txtAddress.Clear(); } private void btnEdit_Click(object sender, EventArgs e) { txtId.Focus(); } private void btnCancel_Click(object sender, EventArgs e) { txtId.Clear(); txtFirstName.Clear(); txtLastName.Clear(); txtAddress.Clear(); } private void btnDelete_Click(object sender, EventArgs e) { try { listView1.Items.RemoveAt(listView1.SelectedIndex); } catch(Exception) {} } public void listView1_ItemSelectionChanged(object ListViewItemSelectionChangedEventArgs e) { txtId.Text=listView1.Items[e.ItemIndex].SubItems[0].Text; txtFirstName.Text=listView1.Items[e.ItemIndex].SubItems[1].Text; txtLastName.Text=listView1.Items[e.ItemIndex].SubItems[2].Text; txtAddress.Text=listView1.Items[e.ItemIndex].SubItems[3].Text; sender, } private void btnClose_Click(object sender, EventArgs e) { this.Close(); } 56 int n = command.ExecuteNonQuery(); con.Close(); dataTable.Clear(); dataAdapter.Fill(dataTable); } catch (SqlException ex) { MessageBox.Show(ex.Message); } } III/Hiển thị liệu, lọc liệu 1/ Hiển thị liệu Sau nhận liệu từ sở liệu, liệu cần hiển thị control Windows Form để người sử dụng thấy Q trình thực sau: Bước 1: Tạo đối tượng SqlConnection để kết nối tới Cơ sở liệu phương thức Main() tạo đối tượng SqlConnection đặt tên mySqlConnection để kết nối tới sở liệu Northwind máy chủ phục vụ SQL: SqlConnection mySqlConnection = new SqlConnection( "server=localhost;database=Northwind;uid=sa;pwd=sa"); Chuỗi chuyển đến khởi dựng SqlConnection biết connection string chứa phần tử sau đây: -Server: rõ tên máy tính SQL Server chạy- ví dụ localhost ; localhost tên chung tham chiếu tới máy tính mà chương trình chạy Nếu sở liệu chạy lưu trú máy tính khác với máy tính mà chương trình thời chạy, cần phải thay localhost với tên máy tính -Database: rõ tên sở liệu - ví dụ Northwind -uid : rõ tên tài khoản người sử dụng sở liệu : ví dụ sa ; sa tài khỏan người dùng sở liệu chung quản lý người quản trị sở liệu "database administrator" (DBA) Chúng ta sử dụng tài khoản người sử dụng sở liệu miễn có quyền truy cập tới sở liệu Northwind -pwd: rõ mật cho người sử dụng Mật cho người sử dụng “sa” sở liệu sa Chúng ta cần thay đổi pwd thành mật cho tài khoản sa chúng ta, hay tài khoản định uid 98 Bước 2: Tạo đối tượng SqlCommand đặt tên mySqlCommand sử dụng sau để gửi phát biểu SELECT cho sở liệu cho thực thi SqlCommand mySqlCommand = mySqlConnection.CreateCommand(); Thiết đặt thuộc tính CommandText Đối tượng SqlCommand Bước 3: Gán thuộc tính CommandText mySqlCommand tạo bước trước tới phát biểu SELECT Phát biểu truy xuất cột CustomerID, CompanyName, ContactName, Address từ hàng bảng khách hàng có CustomerID ALFKI: mySqlCommand.CommandText = "SELECT CustomerID, CompanyName, ContactName, Address "+ "FROM Customers "+ "WHERE CustomerID = 'ALFKI'"; Mở đối tượng SqlConnection Bước 4: Mở kết nối sở liệu sử dụng phương thức Open() đối tượng SqlConnection tạo Bước 1: mySqlConnection.Open(); Một kết nối tới sở liệu mở, gửi lệnh cho sở liệu cho thực thi Chạy phát biểu SELECT Chúng ta chạy phát biểu SELECT trước gán mySqlCommand việc gọi phương thức ExecuteReader() Phương thức trả đối tượng SqlDataReader dùng để đọc liệu hàng trả phát biểu SELECT Bước 5: Tạo đối tượng SqlDataReader gọi phương thức ExecuteReader() đối tượng mySqlCommand để chạy phát biểu SELECT Đọc hàng sử dụng đối tượng SqlDataReader Bước 6: Đọc hàng mySqlDataReader sử dụng phương thức Read(): mySqlDataReader.Read(); Trình bày giá trị cột từ đối tượng SqlDataReader Chúng ta đọc giá trị cho cột từ mySqlDataReader cách chuyển qua tên cột cặp dấu ngoặc vuông Chẳng hạn, mySqlDataReader[ " CustomerID "] trả giá trị cột CustomerID 99 Bước 7: Trình bày giá trị cột cho CustomerID, CompanyName, ContactName, Address: Console.WriteLine("mySqlDataReader[\" CustomerID\"] = "+ mySqlDataReader["CustomerID"]); Console.WriteLine("mySqlDataReader[\" CompanyName\"] = "+ mySqlDataReader["CompanyName"]); Console.WriteLine("mySqlDataReader[\" ContactName\"] = "+ mySqlDataReader["ContactName"]); Console.WriteLine("mySqlDataReader[\" Address\"] = "+ mySqlDataReader["Address"]); Đóng đối tượng SqlDataReader Khi kết thúc việc đọc hàng từ đối tượng SqlDataReader, đóng sử dụng phương thức Close() Bước 8: Gọi phương thức Close() để đóng mySqlDataReader: mySqlDataReader.Close(); Đóng đối tượng SqlConnection Khi kết thúc truy cập sở liệu, đóng đối tượng SqlConnection sử dụng phương thức Close() Bước 9: Gọi phương thức Close() để đóng mySqlConnection: mySqlConnection.Close(); 2/Lọc liệu Dữ liệu từ table sở liệu lất tồn đổ vào Dataset, sau tiến hành lọc dịng liệu cần thiết Ví dụ 9.3 sau mô tả cách thực private void button4_Click(object sender, EventArgs e) { string connectionstring=”PROVIDER=SQLOLEDB; server=(local):uid=netpwd=;database=NET”; OleDbConncetion conObj=new OleDbConnection(connectionstring); conObj.Open(); OleDbCommand cmd=new OleDbConnection(“Select * from books”,conObj); OleDbDataAdapter da=new OleDbDataAdapter(cmd); DataSet ds=new DataSet(); da.Fill(ds,”books”); MessageBox.Show(ds.Tables[“books”].Rows.Count.ToString()); DataView dv=new DataView(ds.Tables[“books”]); 100 dv.RowFilter=”fprice>20000”; dv.Sort=”fprice Desc’; MessageBox.Show(dv.Table.Rows.Count.ToString()); conObj.Close(); } Ví dụ 9.4 lấy danh sách sách có nhà xuất công ty phát hành sách nhà xuất trẻ (mã số inxb=2); private void button5_Click(object sender, EventArgs e) { string connectionstring=”PROVIDER=SQLOLEDB; server=(local):uid=netpwd=;database=NET”; OleDbConncetion conObj=new OleDbConnection(connectionstring); conObj.Open(); OleDbCommand cmd=new inxb=?”,conObj); OleDbConnection(“Select * from books where cmd.CommandType=CommandType.Text; cmd.Parameters.Add(“@ibookid”,2); OleDbDataAdapter da=new OleDbDataAdapter(cmd); DataSet ds=new DataSet(); da.Fill(ds,”books”); MessageBox.Show(ds.Tables[“books”].Rows.Count.ToString()); conObj.Close(); } Chúng ta lưu ý với dòng lệnh cmd.Parameters.Add("@ibookid", 2); Đây cách sử dụng ngắn gọn truyền tham số mà chuyên gia phát triển phần mềm thực tế thường sử dụng, ngun mẫu câu lệnh có cơng thức sau: OleDbParameter param = new OleDbParameter("@paramname",OleDbType.VarChar); param.Value = "value"; Trong đó, OleDbType thư viện kiểu liệu tương ứng với kiểu liệu lưu trữ hệ sở liệu IV/Thao tác với liệu 1/Thêm liệu vào sở liệu private void btnthem_Click(object sender, EventArgs e) { 101 string connectionstring=”PROVIDER=SQLOLEDB; server=(local):uid=netpwd=;database=NET”; OleDbConncetion conObj=new OleDbConnection(connectionstring); conObj.Open(); OleDbCommand cmd=new OleDbCommand(“insert books values(?,?,?,?)”,conObj); cmd.CommandType=CommandType.Text; cmd.Parameters.Add(“@inxb”,2); cmd.Parameters.Add(“@vmasach ”,”MS0002); cmd.Parameters.Add(“@vtensach”,”Lập trình NET cho sống”); cmd.Parameters.Add(“@fgia”,75000); cmd.ExcuteNonQuery(); MessageBox.Show(“Đã thêm sách vào CSDL”); conObj.Close(); } Ở ví dụ trên, câu lệnh SQL insert thực kết hợp với đối tượng tham số Parameters để đẩy liệu vào sở liệu thông qua đối tượng Command 2/ Cập nhật, xóa liệu sở liệu Q trình cập nhật xóa liệu tương tự với thêm sở liệu private void btncapnhat_Click(object sender, EventArgs e) { string connectionstring=”PROVIDER=SQLOLEDB; server=(local):uid=netpwd=;database=NET”; OleDbConncetion conObj=new OleDbConnection(connectionstring); conObj.Open(); OleDbCommand cmd=new OleDbCommand(“update books set vtensach=?,fgia=? where vmasach=?”,conObj); cmd.CommandType=CommandType.Text; cmd.Parameters.Add(“@vmasach ”,”MS0002); cmd.Parameters.Add(“@vtensach”,”.NET for read life”); cmd.Parameters.Add(“@fgia”,85000); cmd.ExcuteNonQuery(); MessageBox.Show(“Đã sửa đổi nội dung sách CSDL”); conObj.Close(); } Xóa liệu private void btncapnhat_Click(object sender, EventArgs e) { string connectionstring=”PROVIDER=SQLOLEDB; server=(local):uid=netpwd=;database=NET”; OleDbConncetion conObj=new OleDbConnection(connectionstring); conObj.Open(); 102 OleDbCommand cmd=new OleDbCommand(“delete from books where vmasach=?”,conObj); cmd.CommandType=CommandType.Text; cmd.Parameters.Add(“@vmasach ”,”MS0002); cmd.ExcuteNonQuery(); MessageBox.Show(“Đã xoá sách CSDL”); conObj.Close(); } V/Bài tập Bài Tạo sở liệu SQL Server với cấu trúc bảng sau: a Tạo Cơ sở liệu tên QLbanhang gồm bảng mối quan hệ sau(Thí sinh tự chọn kiểu liệu cho trường thiết kế mối quan hệ phù hợp): b Nhập liệu mẫu: Nhanvien Hanghoa Nhacungcap Phieunhap 103 Chitietnhap Bài Tạo project có dạng Windows Application lưu vào thư mục tạo với tên số báo danh, thực yêu cầu sau: a Thiết kế Form sau: b Thực yêu cầu sau: - Thực việc kết nối với sở liệu vừa tạo - Khi Load Form hiển thị thông tin thuốc lên DataGridView - Click vào lưới DataGridView thay đổi thông tin lên TextBox - Click vào nút khởi tạo làm trống Textbox - Click nút Lưu lưu thông tin vào sở liệu - Click vào nút Xóa xóa thơng tin thuốc khỏi sở liệu - Click Thốt khỏi chương trình - Click nút Tìm kiếm cho phép tìm theo mã hàng 104 Bài 6: Lập báo cáo với CrystalReport Giới thiệu Crystal Report phần mềm thiết kế báo biểu chuyên nghiệp tích hợp phiên Visual Studio Net Bản thân Crystal Report phần mềm tạo báo biểu độc lập với nhiều chức thiết kế báo biểu dịch vụ Người dùng kết nối với nhiều nguồn liệu khác ODBC Driver Mục tiêu: Nhằm trang bị cho người học: - Kiến thức công cụ tạo báo cáo theo Visual Studio.NET - Kiến thức kỹ sử dụng công cụ CrystalReport - Tạo sử dụng CrystalReport cho ứng dụng Nội dung: I/Giới thiệu công cụ Crystal Report Crystal Report công cụ (phần mềm) hỗ trợ lập báo biểu từ đơn giản đến phức tạp Một report có cấu trúc sau: - Report Header: Chứa thông tin xuất lần đầu report - Page Header: Chứa thông tin xuất lần đầu trang - Group header: Chứa thông tin xuất đầu nhóm - Details: Chứa thơng tin chi tiết - Group footer: Chứa thơng tin cuối nhóm - Report Footer: Chứa thông tin xuất lần cuối report - Page Footer: Chứa thông tin xuất lần cuối trang 105 Hình 6.1: Minh họa loại báo cáo Các đối tượng liệu report: Database fields: -Các trường thuộc dạng CSDL (có thể table, stored procedure, …) -Thơng thường trường mục hiển thị phần detail report Formula fields -Các trường tạo thành từ việc thiết lập công thức -Tạo đối tượng formula cách sử dụng Formula Editor Formula Expert Parameter fields -Là trường tham số cho report -Là tham số ta tự khai báo, Crystal Report tự động thêm vào ta đưa stored procedure có tham số vào database field -Khi chạy report Crystal, trường tham số hỏi giá trị, ta cần nhập vào Crystal để hiển thị tạm thời Group Name Field -Các thuộc tính dùng để gom nhóm liệu report Running Total Field -Trường chứa giá trị tổng hợp (aggregate) : max, min, sum, count,… 106 Special fields -Các trường đặt biệt có sẵn Crystal Thông thường trường hiển thị phần header, footer Ví dụ: • Record Number → Số thứ tự • Page Number → Số trang • Group Number → Số thứ tự nhóm II/ Gắn kết liệu vào báo cáo Crystal Report kết nối với nguồn liệu thơng qua trình liệu Mỗi trình liệu viết để xử lý cho loại liệu cho kỹ thuật truy xuất cụ thể Để thuận lợi cho người lập trình, trình liệu Crystal Report cung cấp hai mơ hình truy xuấtlà Push Pull Mơ hình Pull Trong mơ hình trình kết nối với nguồn liệu lấy liệu yêu cầu Kết nối với nguồn liệu câu lệnh SQL truy xuất liệu điều Crystal Report xử lý, khơng phải viết dịng lệnh Mơ hình Push Ngược lại, mơ hình Push địi hỏi phải viết lệnh kết nối liệu, thực truy xuất liệu để tạo RecordSet DataSet chứa field cần thiết cho báo cáo mơ hình cho phép chia kết nối ứng dụng lọc liệu trước đưa vào báo cáo b Sử dụng Crystal Report Viewer để hiển thị báo cáo Để hiển thị báo cáo cần phải có Crystal Report Viewer Có thể thiết kế riêng form để chứa điều khiển để hiển thị báo cáo cung cấp thêm số chức đặc biệt chương trình Trong trường hợp đơn giản, thân Crystal Report Viewer cung cấp đầy đủ chức hiển thị báo cáo tương tác với người dùng Do đó, tạo form Crystal Report Viewer đoạn lệnh chương trình c Nguồn liệu cho báo cáo từ DataSet Một điểm đặc biệt Visual Studio.NET tạo nguồn liệu cho báo cáo từ DataSet (mơ hình Push) Sử dụng DataSet làm nguồn liệu cho báo cáo cho phép tạo báo cáo không cần kết nối với sở liệu hay 107 chí tạo báo cáo ứng dụng hoạt động không cần có sở liệu Chẳng hạn, lấy cấu trúc DataSet từ tập tin XML làm nguồn liệu cho báo cáo Để gán nguồn liệu cho báo cáo, cần biến đối tượng thể báo cáo thiết kế Khi có DataSet, sử dụng phương thức ReportSource đối tượng báo cáo để gán DataSet làm nguồn liệu d Lọc liệu báo cáo Để lọc liệu báo cáo ta sử dụng thuộc tính RecordSelectionFormula với cú pháp sau: .RecordSelectionFormula= “{.} ” Tốn tử so sánh =, >=, ,