Objectives: ü Hiểu về từ khóa new trong kế thừa ü Hiểu về PolymoPhism trong C# ü Tại sao và cách khai báo từ khóa virtual cho phương thức trong Class ü Class abstract và những thành viên của nó ü Hiểu về khái niệm interface và implementation cho interface |
Exercise: Tạo 1 Solution tên là Exercise02Soln Exercise 1 : Tạo 1 Project windows application vào Solution tên NewPro · Thêm mới Class IOProviders.cs · Khai báo using System.Windows.Forms; · Khai báo phương thức Protected ShowFiles để hiển thị những file trong folder với tham số thứ nhất là tên folder,tham số thứ 2 là ListView control · Khai báo phương thức internal ShowFolder để hiển thị những folder con trong folder cha với tham số thứ nhất là tên folder,tham số thứ 2 là ListView control using System; using System.Collections.Generic; using System.Windows.Forms; using System.Text; using System.IO; using System.Data; namespace NewPro { class IOProviders { /// <summary> /// ShowFiles in folder /// </summary> /// <param name="folderName">Set Folder name</param> /// <param name="listView"> Set Listview</param> protected void ShowFiles(string folderName,ListView listView) { DataTable dataTable = new DataTable(); dataTable.Columns.Add("FullName"); DirectoryInfo directoryInfo = new DirectoryInfo(folderName); FileInfo[] fileInfo = directoryInfo.GetFiles(); DataRow dataRow; foreach (FileInfo item in fileInfo) { dataRow = dataTable.NewRow(); dataRow["FullName"] = item.FullName; dataTable.Rows.Add(dataRow); } ListViewItem listViewItem = new ListViewItem(); listView.Items.Clear(); for (int i = 0; i < dataTable.Rows.Count; i++) { listViewItem = listView.Items.Add(dataTable.Rows[i][0].ToString()); } } /// <summary> /// Show SubFolder in folder /// </summary> /// <param name="path">Set Path</param> /// <param name="listView">Set ListView</param> internal void ShowFolder(string path, ListView listView) { DataTable dataTable = new DataTable(); dataTable.Columns.Add("FullName"); DirectoryInfo directoryInfo = new DirectoryInfo(path); DirectoryInfo[] listDirectoryInfo = directoryInfo.GetDirectories(); foreach (DirectoryInfo directory in listDirectoryInfo) { DataRow dataRow = dataTable.NewRow(); dataRow[0] = directory.FullName; dataTable.Rows.Add(dataRow); } ListViewItem item = new ListViewItem(); listView.Items.Clear(); for (int i = 0; i < dataTable.Rows.Count; i++) { item = listView.Items.Add(dataTable.Rows[i][0].ToString()); } } } } Exercise 2 : Tiếp tục với project NewPro · Thêm mới Class FileProviders.cs · Khai báo kế thừa từ lớp cha là IOProviders · Khai báo phương thức ShowFiles để hiển thị những file trong folder với tham số thứ nhất là tên folder,tham số thứ 2 là ListView control · Khai báo phương thức internal ShowFolder để hiển thị những folder con trong folder cha với tham số thứ nhất là tên folder,tham số thứ 2 là ListView control · Build project ? ta thấy warning khi không có từ khóa new để che giấu 2 phương thức trùng nhau using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.IO; using System.Windows.Forms; namespace NewPro { class FileProvider:IOProviders { /// <summary> /// ShowFiles in folder /// </summary> /// <param name="folderName">Set Folder name</param> /// <param name="listView"> Set Listview</param> internal new void ShowFiles(string path, ListView listView) { DataTable dataTable = new DataTable(); dataTable.Columns.Add("FullName"); DirectoryInfo directoryInfo = new DirectoryInfo(path); FileInfo[] fileInfo = directoryInfo.GetFiles(); DataRow dataRow; foreach (FileInfo item in fileInfo) { dataRow = dataTable.NewRow(); dataRow["FullName"] = item.FullName; dataTable.Rows.Add(dataRow); } ListViewItem listViewItem = new ListViewItem(); listView.Items.Clear(); for (int i = 0; i < dataTable.Rows.Count; i++) { listViewItem = listView.Items.Add(dataTable.Rows[i][0].ToString()); } } /// <summary> /// Show SubFolder in folder /// </summary> /// <param name="path">Set Path</param> /// <param name="listView">Set ListView</param> internal new void ShowFolder(string path, ListView listView) { DataTable dataTable = new DataTable(); dataTable.Columns.Add("FullName"); DirectoryInfo directoryInfo = new DirectoryInfo(path); DirectoryInfo[] listDirectoryInfo = directoryInfo.GetDirectories(); foreach (DirectoryInfo directory in listDirectoryInfo) { DataRow dataRow = dataTable.NewRow(); dataRow[0] = directory.FullName; dataTable.Rows.Add(dataRow); } ListViewItem item = new ListViewItem(); listView.Items.Clear(); for (int i = 0; i < dataTable.Rows.Count; i++) { item = listView.Items.Add(dataTable.Rows[i][0].ToString()); } } } } Exercise 3 : Tiếp tục với Project NewPro · Trong Form1 o Thêm ListView vào Form1 tên listView · Thêm Button vào Form1 tên btnShowFile o Khai báo code trong sự kiện của btnShowFile gọi phương thức ShowFiles với tham số thứ nhất là “C://” và tham số thứ hai là listView private void btnShowFile_Click(object sender, EventArgs e) { FileProvider fileProvider = new FileProvider(); fileProvider.ShowFiles("C://", listView1); } o Nhấn F5 thấy hiển thị file lên listView Exercise 4 : Tiếp tục với Project NewPro · Thêm Button vào Form1 tên btnShowFolder o Khai báo code trong sự kiện của btnShowFolder gọi phương thức ShowFolders với tham số thứ nhất là “C://” và tham số thứ hai là listView private void btnShowFolder_Click(object sender, EventArgs e) { FileProvider folderProvider = new FileProvider(); folderProvider.ShowFolder("C://", listView1); } o Nhấn F5 thấy hiển thị file lên listView Exercise 5 : Tạo 1 Project windows application vào Solution tên PolymoPhismPro · Thêm 1 Class mới tên IOProviders.cs · Khai báo using System.Windows.Forms; · Khai báo Properties o Khai báo biến private § Kiểu string tên path § Kiểu ListView control tên listView string path = ""; ListView listView; o Khai báo internal Properties § Kiểu string tên Path § Kiểu ListView control tên ListView internal string Path { get { return path; } set { path = value; } } internal ListView ListView { get { return listView; } set { listView = value; } } · Khai báo phương thức o Khai báo phương thức ShowItems với từ khóa virtual nhận vào § Tham số thứ 1: Kiểu string tên path § Tham số thứ 2: Kiểu ListView control tên listView § Code là MessageBox.Show("Nothing"); internal virtual void ShowItems(string path, ListView listView) { MessageBox.Show("Nothing"); } o Khai báo internal phương thức là Show và gọi ShowItems với tham số thứ nhất là biến path, tham số thứ hai là biến listView internal void Show() { ShowItems(path, listView); } Exercise 6 : Tiếp tục với Project PolymoPhismPro · Thêm 1 Class mới tên FileProvider.cs · Khai báo kế thừa từ Class IOProviders · Khai báo phương thức ShowItems với từ khóa override nhận vào o Tham số thứ 1: Kiểu string tên path o Tham số thứ 2: Kiểu ListView control tên listView · Khai báo code để hiển thị files của folder(path) trên listView using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Data; namespace PolymorPhismPro { class FileProvider:IOProviders { internal override void ShowItems(string path, ListView listView) { DataTable dataTable = new DataTable(); dataTable.Columns.Add("FullName"); DirectoryInfo directoryInfo = new DirectoryInfo(path); FileInfo[] fileInfo = directoryInfo.GetFiles(); DataRow dataRow; foreach (FileInfo item in fileInfo) { dataRow = dataTable.NewRow(); dataRow["FullName"] = item.FullName; dataTable.Rows.Add(dataRow); } ListViewItem listViewItem = new ListViewItem(); listView.Items.Clear(); for (int i = 0; i < dataTable.Rows.Count; i++) { listViewItem = listView.Items.Add(dataTable.Rows[i][0].ToString()); } //base.ShowItems(path, listView); } } } Exercise 7 : Tiếp tục với Project PolymoPhismPro · Thêm 1 Class mới tên FolderProvider.cs · Khai báo kế thừa từ Class IOProviders · Khai báo phương thức ShowItems với từ khóa override nhận vào o Tham số thứ 1: Kiểu string tên path o Tham số thứ 2: Kiểu ListView control tên listView · Khai báo code để hiển thị sub folder của folder(path) trên listView using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data; using System.IO; namespace PolymorPhismPro { class Folderprovider:IOProviders { internal override void ShowItems(string path, ListView listView) { DataTable dataTable = new DataTable(); dataTable.Columns.Add("FullName"); DirectoryInfo directoryInfo = new DirectoryInfo(path); DirectoryInfo[] listDirectoryInfo = directoryInfo.GetDirectories(); foreach (DirectoryInfo directory in listDirectoryInfo) { DataRow dataRow = dataTable.NewRow(); dataRow[0] = directory.FullName; dataTable.Rows.Add(dataRow); } ListViewItem item = new ListViewItem(); listView.Items.Clear(); for (int i = 0; i < dataTable.Rows.Count; i++) { item = listView.Items.Add(dataTable.Rows[i][0].ToString()); } //base.ShowItems(path, listView); } } } Exercise 8 : Tiếp tục với Project PolymoPhismPro · Trong Form1 o Thêm ListView vào Form1 tên listView · Thêm Button vào Form1 tên btnShow1 o Khai báo code trong sự kiện của btnShow1 o Khai báo Class IOProviders và khởi tạo IOProviders gọi phương thức Show o Nhấn F5 thấy hiển thị file lên listView · Thêm Button vào Form1 tên btnShow2 o Khai báo code trong sự kiện của btnShow2 o Khai báo Class IOProviders và khởi tạo FileProviders gọi phương thức Show o Nhấn F5 thấy hiển thị file lên listView · Thêm Button vào Form1 tên btnShow3 o Khai báo code trong sự kiện của btnShow3 o Khai báo Class IOProviders và khởi tạo FolderProviders gọi phương thức Show o Nhấn F5 thấy hiển thị file lên listView Exercise 9 : Thêm mới 1 Class Library vào Solution tên là DataProviders · Thêm 1 Class mới tên SQLServerProvider.cs o Thêm từ khóa abstract trước từ khóa Class o Khai báo abstract properties § ConnectionString, CommandText, CommandType o Khai báo abstract methods § Không có tham số tên ExecuteNonQuery() § Với 2 tham số tên ExecuteNonQuery(string parameterName, object parameterObject) § Với mảng tham số tên ExecuteNonQuery(string[] parameterName, object[] parameterObject) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; namespace DataProviders { public abstract class SqlServerProvider { public abstract string ConnectionString { get; set; } public abstract string CommandText { get; set; } public abstract CommandType CommandType { get; set; } public abstract void ExecuteNonQuery(); public abstract void ExecuteNonQuery(string parameterName, object parameterObject); public abstract void ExecuteNonQuery(string[] parameterName, object[] parameterObject); } } o Build project này thành Assembly Exercise 10 : Tạo 1 Project windows application vào Solution tên AbstractPro · Add reference đến DataProvider.dll · Khai Thêm 1 Class mới tên DataProvider.cs · Khai báo kế thừa đến SQLServerProvider (Using DataProvider) § Khai báo code bên trong cho thuộc tính ConnectionString, CommandText, CommandType § Khai báo code bên trong cho 3 phương thức ExecuteNonQuery using System; using System.Collections.Generic; using System.Linq; using System.Text; using DataProviders; using System.Data; using System.Data.SqlClient; namespace AbstractPro { class DataProvider:SqlServerProvider { SqlConnection sqlConnection = null; SqlCommand sqlCommand = null; #region Properties string commandText = ""; /// <summary> /// This is Properties of CommandText /// </summary> public override string CommandText { get { return commandText; } set { commandText = value; } } CommandType commandType; /// <summary> /// This is Properties of CommandType /// </summary> public override CommandType CommandType { get { return commandType; } set { commandType = value; } } string connectionString = ""; /// <summary> /// This is Properties of ConnectionString /// </summary> public override string ConnectionString { get { return connectionString; } set { connectionString = value; } } #endregion Properties #region ExecuteNonQuery /// <summary> /// This is ExecuteNonQuery Method with array parameter /// </summary> /// <param name="parameterName">The name of parameter</param> /// <param name="parameterObject">The values of parameter</param> public override void ExecuteNonQuery(string[] parameterName, object[] parameterObject) { using (sqlConnection = new SqlConnection()) { sqlConnection.ConnectionString = connectionString; sqlConnection.Open(); sqlCommand = new SqlCommand(commandText, sqlConnection); sqlCommand.CommandType = commandType; for (int i = 0; i < parameterName.Length; i++) { sqlCommand.Parameters.AddWithValue(parameterName[i], parameterObject[i]); } sqlCommand.ExecuteNonQuery(); } } /// <summary> /// This is ExecuteNonQuery Method with string parameter /// </summary> /// <param name="parameterName">The name of parameter</param> /// <param name="parameterObject">The values of parameter</param> public override void ExecuteNonQuery(string parameterName, object parameterObject) { using (sqlConnection = new SqlConnection()) { sqlConnection.ConnectionString = connectionString; sqlConnection.Open(); sqlCommand = new SqlCommand(commandText, sqlConnection); sqlCommand.CommandType = commandType; sqlCommand.Parameters.AddWithValue(parameterName, parameterObject); sqlCommand.ExecuteNonQuery(); } } /// <summary> /// This is ExecuteNonQuery Method /// </summary> public override void ExecuteNonQuery() { using (sqlConnection = new SqlConnection()) { sqlConnection.ConnectionString = connectionString; sqlConnection.Open(); sqlCommand = new SqlCommand(commandText, sqlConnection); sqlCommand.CommandType = commandType; sqlCommand.ExecuteNonQuery(); } } #endregion ExecuteNonQuery } } · Thêm mới 1 Form tên Form1 o Thêm mới 2 TextBox controls đến Form1 cho phép người sử dụng nhập ProvinceId và ProvinceName o Thêm mới Button control đến Form1 tên là btnSave o Khai báo code trong sự kiện của btnSave và gọi phương thức ExecuteNonQuery với mảng tham số bằng việc sử dụng câu lệnh Insert (stored procedure) private void btnSave_Click(object sender, EventArgs e) { DataProvider dataProvider = new DataProvider(); dataProvider.ConnectionString = "server=(local);database=StudentManagementForProfessional;integrated security=true"; dataProvider.CommandText = "udsProvinceInsert"; dataProvider.CommandType = CommandType.StoredProcedure; string[] parameterName=new string[]{"@ProvinceId","@ProvinceName"}; object[] parameterValue=new object[]{txtProvinceId.Text,txtProvinceName.Text}; dataProvider.ExecuteNonQuery(parameterName, parameterValue); MessageBox.Show("Successfull"); } § Nhập Id là TIG và Name là TIEN GIAN vào TextBox § Nhấn F5 | Kiểm tra trong database đã được thêm chưa ? Exercise 11 : Thêm mới 1 Windows Application vào Solution tên là DataProvider · Thêm 1 Class mới tên IDataProvider.cs o Xóa từ khóa Class thay bằng từ khóa interface o Khai báo phương thức § Không có tham số tên ExecuteNonQuery() § Với 2 tham số tên ExecuteNonQuery(string parameterName, object parameterObject) § Với mảng tham số tên ExecuteNonQuery(string[] parameterName, object[] parameterObject) using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DataProvider { public interface IDataProvider { void ExecuteNonQuery(); void ExecuteNonQuery(string parameterName, object parameterObject); void ExecuteNonQuery(string[] parameterName, object[] parameterObject); } } o Build project này thành Assembly Exercise 12 : Tiếp tục với project DataProviders · Thêm 1 Class mới tên DataProvider.cs · Khai báo kế thừa từ interface IDataProvider o Khai báo code bên trong cho 3 phương thức ExecuteNonQuery() · Thêm 1 Form mới tên Form1 · Thêm controls và khai báo để gọi phương thức trong Class |
0 comments:
Post a Comment