Sửa dữ liệu trong listview C#

 :: Chia sẻ kiến thức :: Các môn chuyên ngành :: Lập trình Windows 2

 by Admin Sat Mar 29, 2014 7:07 pm

Bài Tutorial này sẽ hướng dẫn thực hiện truy cập và xử lý dữ liệu theo mô hình 1 lớp
Cơ sở dữ liệu:

Trong đó MaKH trong bảng KHACHHANG, Mahd trong bảng hóa đơn được thiết lập tự động tăng.

Mô tả bài toán:


- Khi Form Load sẽ hiển thị danh sách khách hàng lên ListView, nút Sửa, Xóa bị vô hiệu hóa. - Sau khi nhập thông tin trên các Textbox và nhấn nút thêm sẽ thêm khách hàng mới vào CSDL. [Do Mã khách hàng ta đặt là thuộc tính tự động tăng trong CSDL nên txtMakh ở chế độ readonly, ta không cần nhập mã khách hàng]- Khi người dùng chọn một khách hàng trên Listview nút sửa, xóa sáng lên, đồng thời thông tin của khách hàng được chọn sẽ được hiển thị trên các Textbox tương ứng.- Khi người dùng Click nút Sửa, Xóa sẽ thực hiện chức năng tương ứng.- Khi người dùng nhấn nút Thoát, chương trình hiển thị thông báo xác nhận từ người dùng.

Để dễ dàng theo dõi, chúng ta lượt qua một loạt tên các đối tượng trên giao diện:

Một ứng dụng truy cập đến cơ sở dữ liệu đều thực hiện qua các bước sau:

Bước 1: Kết nối CSDL


Bước 2: Tạo truy vấn và thực thi.
Bước 3: Nhận kết quả và xử lý lên Form.Sau đây chúng ta sẽ đi vào thực hiện:Để sử dụng được các đối tượng kết nối và command cần khai báo các namespace:Code:using System.Data;
using System.Data.SqlClient;Chương trình cần một đối tượng kết nối SqlConnection, một đối tượng SqlCommand để thực hiện các câu truy vấn
Code:SqlConnection connection;
SqlCommand cmdTạo kết nối- Đối tượng SqlConnection sẽ thực hiện kết nối với csdl. Để tạo đối tượng SqlConnection sử dụng hàm khởi tạo:Code:connection = new SqlConnection[strConn]trong đó strConn là chuỗi kết nối.Mỗi chuỗi kết nối cần thể hiện các thông tin về tên máy, tên CSDL, username, password: Server [tên máy], Initial Catalog [tên csdl], uid [username], pwd [password].Tên máy: là tên server, có thể sử dụng dấu ‘.’ chỉ server trên local. Nếu SQL được cài với phiên bản express thì tên máy: .//SQLExpress

Khi kết nối đến cơ sở dữ liệu có 2 kiểu chứng thực: Windows Authentication và Sql Server Authentication. Nếu kết nối với kiểu Windows Authentication thì thay uid và pwd bằng Integrated security = true.

Ví dụ:- Chuỗi kết nối dưới đây với kiểu chứng thực Windows Authentication, tên máy là localhost [sử dụng dấu .]Code:string strConn = "Server = .; Initial Catalog =QLBanhang; integrated security =true";- Chuỗi kêt nôi dưới đây với kiểu chứng thực SQL Server Authentication
Code:string strConn = "Server = .; Initial Catalog =QLBanhang; uid=user; pwd=1111";Sau khi khởi tạo đối tượng kết nối để kiểm tra kết nối thành công hay không ta thực hiện mở kết nối
Code:connection.Open[];Việc mở kết nối có thể xảy ra lỗi nên ta đặt trong khối try..catch..finally.Hàm kết nối có thể viết như sau:Code:void ketnoi[]        {            //Chuoi ket noi voi kieu xác thuc Windows            string strConn = "Server = .; Initial Catalog =QLBanhang; integrated security =true";            connection = new SqlConnection[strConn]; //Tao doi tuong ket noi            try            {                     connection.Open[]; // Mo ket noi, neu thanh cong                      MessageBox.Show["Ket noi thanh cong"];            }            catch [Exception ex]            {                     MessageBox.Show[ex.Message];            }            finally            {                                    connection.Close[];            }

      }

- Lấy dữ liệu hiển thị lên Listview
Code:void LoadListview[]        {            try            {                //Truoc khi thuc thi lenh phai mo ket noi                            connection.Open[];                 string sql = "Select * From Khachhang"; //Chuoi truy van thuc hien lay danh sach khach hang                cmd = new SqlCommand[sql,connection]; //Tao doi tuong command cho cau truy van                //Thuc thi truy van. Do cau truy van Select se tra ve mot bang du lieu nen su dungphuong thuc thuc thi la ExecuteReader[]                             SqlDataReader reader = cmd.ExecuteReader[];                //reader se doc tung ban ghi [dong] trong bang du lieu tra ve va dua len Listview                while [reader.Read[]]                {                        //Tao ListviewItem voi text la cot dau tien trong bản ghi [Makh]                     ListViewItem itm = new ListViewItem[reader[0].ToString[]];                           //Moi mot subItem la cac cot tiep theo cua ban ghi                                       itm.SubItems.Add[reader[1].ToString[]];                                        itm.SubItems.Add[reader[2].ToString[]];                                       itm.SubItems.Add[reader[3].ToString[]];                                       itm.SubItems.Add[reader[4].ToString[]];                                       lstvKH.Items.Add[itm]; //Add item vao listview              }            }            catch [Exception ex]            {                //Neu ket noi khong mo duoc ket noi, hoac cau truy van sai chuong trính sẽ di vaokhoi catch                MessageBox.Show[ex.Message]; //Hiển thị thông báo lỗi của ngoại lệ            }            finally            {                //cuoi cung chuong trinh co loi hay khong thi van dong ket noi                //Cuoi cung dong ket noi                               connection.Close[];            }

        }

Khi Form load sẽ thực hiện kết nối và hiển thị danh sách khách hàng lên Listview. Do đó trong sự kiện Form Load gọi 2 hàm: ketnoi[], LoadListview[]
Code:private void fmKhachhang_Load[object sender, EventArgs e]        {            //khi form load se thuc hien ket noi den csdl            ketnoi[];            //Load danh sach khach hang len Listview            LoadListview[];        }Viết chức năng Thêm cho btnThem:Khi click vào nút Thêm sẽ thực hiện truy vấn insert dữ liệu vào bảng. Câu truy vấn như sau:Code: string sql = "Insert into Khachhang values[N'"+txtHoten.Text+"',N'"+txtDiachi.Text+"','"+txtDienthoai.Text+"','"+txtEmail.Text+"']";//Tạo đối tượng SqlCommand SqlCommand cmd = new SqlCommand[sql, connection];Do câu truy vấn Insert không trả về bảng dữ liệu nên để thực thi command ta sử dụng hàm ExecuteNonQuery[], hàm này sẽ trả về số dòng thực hiện Insert, nếu thực hiện thành công sẽ trả về một số lớn hơn 0. Ta có thể viết sự kiện thêm như sau:
Code: private void btnThem_Click[object sender, EventArgs e]        {            try            {                connection.Open[]; //Mở kết nối                //Câu truy vấn Insert                string sql = "Insert into Khachhang values[N'"+txtHoten.Text+"',N'"+txtDiachi.Text+"','"+txtDienthoai.Text+"','"+txtEmail.Text+"']";                cmd = new SqlCommand[sql, connection]; //Tạo đối tương command                int rows = cmd.ExecuteNonQuery[]; //rows sẽ lưu số dòng command thực thi thành công                if [rows > 0]                    MessageBox.Show["Them thanh cong"];            }            catch [Exception ex]            {                MessageBox.Show[ex.Message];            }            finally            {                connection.Close[]; //Đóng kết nối                lstvKH.Items.Clear[]; //Xóa danh sách khách hàng cũ                LoadListview[]; //Hiển thị lại danh sách khách hàng mới sau khi thêm            }        }
- Khi người dùng chọn một khách hàng trên Listview nút sửa, xóa sáng lên, đồng thời thông tin của khách hàng được chọn sẽ được hiển thị trên các Textbox tương ứng. Bắt Sự kiện SelectedIndexChanged trên Listview.Để kiểm tra xem người dùng có chọn lên Items của listview hay không ta kiểm tra qua thuộc tính lstvKH.SelectedItems.Count, cho biết số lượng Item được chọn. Nếu lstvKH.SelectedItems.Count  > 0  tức là khách hàng được chọnCode:private void lstvKH_SelectedIndexChanged[object sender, EventArgs e]        {            if [lstvKH.SelectedItems.Count > 0] //  lstvKH.SelectedItems.Count cho biết số lượng Item được chọn. Nếu > 0  tức là khách hàng được chọn            {                //Bật nút Sửa và Xóa                btnSua.Enabled = true;                btnXoa.Enabled = true;                //Đưa nội dung mục được chọn lên các textbox tương ứng.                txtMakh.Text = lstvKH.SelectedItems[0].Text;                txtHoten.Text = lstvKH.SelectedItems[0].SubItems[1].Text;                txtDiachi.Text = lstvKH.SelectedItems[0].SubItems[2].Text;                txtDienthoai.Text = lstvKH.SelectedItems[0].SubItems[3].Text;                txtEmail.Text = lstvKH.SelectedItems[0].SubItems[4].Text;            }            else            {//Ngược lại nếu người dùng không chọn một khách hàng nào trên listview                btnSua.Enabled = false;                btnXoa.Enabled = false;                txtMakh.Text = "";                txtHoten.Text = "";                txtDiachi.Text = "";                txtDienthoai.Text = "";                txtEmail.Text = "";            }        }Tiếp theo ta viết chức năng sửa:
Code:private void btnSua_Click[object sender, EventArgs e]        {            try            {                connection.Open[]; //Tạo câu truy vân Update                string sql = "Update khachhang set hoten=N'" + txtHoten.Text;                sql += "', diachi=N'" + txtDiachi.Text;                sql += "', dienthoai='" + txtDienthoai.Text;                sql += "', email='" + txtEmail.Text;                sql += "' where makh='" + txtMakh.Text + "'";                cmd = new SqlCommand[sql, connection];                int rows = cmd.ExecuteNonQuery[];                if [rows > 0]                    MessageBox.Show["Cập nhật thành công"];            }            catch [Exception ex]            {                MessageBox.Show[ex.Message];            }            finally            {                connection.Close[];                lstvKH.Items.Clear[];                LoadListview[];            }        }Tiếp theo ta viết chức năng xóa:
Code:private void btnXoa_Click[object sender, EventArgs e]        {//truoc khi xoa hien thi thong bao xac nhan nguoi dung chac muon xoa khach hang            DialogResult rs = MessageBox.Show["Ban co chac muon xoa khach hang " + txtHoten.Text + " khong?", "xac nhan", MessageBoxButtons.YesNo, MessageBoxIcon.Question];            if [rs == DialogResult.Yes]            {                try                {                    connection.Open[];                    //Tạo câu truy vân Update                    string sql = "Delete from Khachhang where makh='" + txtMakh.Text + "'";                    cmd = new SqlCommand[sql, connection];                    int rows = cmd.ExecuteNonQuery[];                    if [rows > 0]                        MessageBox.Show["Ban da xoa thanh cong khach hang "+txtHoten.Text];                }                catch [Exception ex]                {                    MessageBox.Show[ex.Message];                }                finally                {                    connection.Close[];                    lstvKH.Items.Clear[];                    LoadListview[];                }            }        }Cuối cùng viết chức năng cho nút Thoát
Code:private void btnThoat_Click[object sender, EventArgs e]        {             DialogResult rs = MessageBox.Show["Ban co muon thoat chuong trinh khong?", "xac nhan", MessageBoxButtons.YesNo, MessageBoxIcon.Question];             if [rs == DialogResult.Yes]             {                 this.Close[];             }        }Ok! Chúng ta vừa thực hiện truy cập và xử lý dữ liệu với các thao tác cơ bản: Hiển thị, thêm, xóa, sửa Các bạn có thể xem lại toàn bài ở video sau:


AdminAdmin

Tổng số bài gửi : 12
Join date : 25/03/2014

 

 by trungtulxag Mon Mar 31, 2014 9:20 am

sao thấy khác khác ta ....


trungtulxag
Tổng số bài gửi : 2
Join date : 31/03/2014
Age : 29
Đến từ : long xuyên an giang

 

 by Admin Mon Mar 31, 2014 1:17 pm

trungtulxag đã viết:sao thấy khác khác ta ....

Khi lập trình chúng ta có thể viết nhiều cách khác nhau, nhưng nhìn chung khi thực hiện truy cập và xử lý dữ liệu cơ bản đều thực hiện qua các bước:1- Kết nối đến server2- Viết truy vấn và thực thi3- Xử lý kết quả, hiển thị lên Form

Đây là cách lập trình theo 1 lớp, tất cả xử lý đều làm tại Form


AdminAdmin

Tổng số bài gửi : 12
Join date : 25/03/2014

 

 by phanthanhhongphat Mon Apr 07, 2014 6:51 pm

Lam sao chep dc doan code do' cho no co' mau` y thinh trong C# vay co oi @@!


phanthanhhongphat
Tổng số bài gửi : 5
Join date : 31/03/2014

 

 by Admin Tue Apr 08, 2014 12:40 pm

phanthanhhongphat đã viết:Lam sao chep dc doan code do' cho no co' mau` y thinh trong C# vay co oi @@!

Em xem bài hướng dẫn này nhé Hướng dẫn Post bài trên diễn đàn


AdminAdmin

Tổng số bài gửi : 12
Join date : 25/03/2014

 

 by Sponsored content

 

 :: Chia sẻ kiến thức :: Các môn chuyên ngành :: Lập trình Windows 2

Permissions in this forum:

Bạn không có quyền trả lời bài viết

Video liên quan

Chủ Đề