Wednesday, February 22, 2012

LESSON 02: MORE OF OOP CONCEPT

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