NEWS

Lập trình ứng dụng thêm - xóa - sửa trực tiếp trên DataGridview (Crub database on DataGridview use Cshap)

Lập trình ứng dụng thêm - xóa - sửa trực tiếp trên DataGridview (Crub database on DataGridview use Cshap)
Đăng bởi: Thảo Meo - Lượt xem: 57231 15:48:37, 29/11/2015C#   In bài viết

Hôm nay, mình xin hướng dẫn các bạn lập trình ứng dụng thêm, xóa, sửa trực tiếp trên datagridview sử dụng Cshap.Ở bài viết này, mình sử dụng  SqlCommandBuilder để tạo lệnh (thêm, xóa, sửa) gán vào SqlDataAdapter.

Chương trình có giao diện như video bên dưới:

- Ở trong ví dụ này, mình sử dụng database với test và bảng table là tbl_students. Các bạn có thể copy code Sql bên dưới để insert vào database để viết ứng dụng.

USE [test]
GO

/****** Object:  Table [dbo].[tbl_students]    Script Date: 11/29/2015 15:45:49 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[tbl_students](
	[id] [nchar](10) NOT NULL,
	[name] [nvarchar](50) NULL,
	[address] [nvarchar](150) NULL,
	[phone] [nchar](10) NULL,
	[email] [nvarchar](50) NULL,
 CONSTRAINT [PK_tbl_students] PRIMARY KEY CLUSTERED 
(
	[id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

- Đầu tiên, chúng ta cần import thư viện sql client vào

using System.Data.SqlClient;

- Khai báo cáo biến kết nối với Microsoft Sql Server, biến này khai báo Global nha các bạn:

SqlConnection sqlCon = new SqlConnection("Server=(local); Database=test; Integrated Security=TRUE");

SqlCommandBuilder sqlCommand = null;

SqlDataAdapter sqlAdapter = null;

DataSet dataset = null;

- Tiếp đến, chúng ta viết thêm một void để load database từ cơ sở dữ liệu vào datagridview, ở đây chúng ta select thêm biến delete tạo một link hiển thị vào datagridview. Ở đây, các bạn chú ý, vị trí tạo thêm trường delete mình có bôi đậm ở dưới trong đoạn code.

private void LoadData()
 {
    try
    {
        sqlAdapter = new SqlDataAdapter("SELECT *, 'Delete' AS [Delete] FROM tbl_students", sqlCon);
        sqlCommand = new SqlCommandBuilder(sqlAdapter);
        sqlAdapter.InsertCommand = sqlCommand.GetInsertCommand();
        sqlAdapter.UpdateCommand = sqlCommand.GetUpdateCommand();
        sqlAdapter.DeleteCommand = sqlCommand.GetDeleteCommand();
        dataset = new DataSet();
        sqlAdapter.Fill(dataset, "tbl_students");
        dataGridView1.DataSource = null;
        dataGridView1.DataSource = dataset.Tables["tbl_students"];
        for (int i = 0; i < dataGridView1.Rows.Count; i++)
        {
            DataGridViewLinkCell linkCell = new DataGridViewLinkCell();
            dataGridView1[5, i] = linkCell;
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

- Tiếp đến, chúng ta sẽ viết sự kiện formload để load database vào datagridview.

private void Form1_Load(object sender, EventArgs e)
 {
            try
            {
                sqlCon.Open();
                LoadData();
            }
             catch (Exception ex) { MessageBox.Show(ex.Message); }
 }

- Tiếp đến, chúng ta viết sự kiện CellContentClick cho datagridview. khi nhấn vào nút insert, update hay delete

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
 {
   try
    {
        if (e.ColumnIndex == 5)
        {
            string Task = dataGridView1.Rows[e.RowIndex].Cells[5].Value.ToString();
            if ( Task == "Delete")
            {
                if (MessageBox.Show("Bạn có chắc chắm muốn xóa không?", "Đang xóa...", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    int rowIndex = e.RowIndex;
                    dataGridView1.Rows.RemoveAt(rowIndex);
                    dataset.Tables["tbl_students"].Rows[rowIndex].Delete();
                    sqlAdapter.Update(dataset, "tbl_students");
                }
            }
            else if(Task == "Insert")
            {
                int row = dataGridView1.Rows.Count - 2;
                DataRow dr = dataset.Tables["tbl_students"].NewRow();
                dr["id"] = dataGridView1.Rows[row].Cells["id"].Value;
                dr["name"] = dataGridView1.Rows[row].Cells["name"].Value;
                dr["address"] = dataGridView1.Rows[row].Cells["address"].Value;
                dr["phone"] = dataGridView1.Rows[row].Cells["phone"].Value;
                dr["email"] = dataGridView1.Rows[row].Cells["email"].Value;
                dataset.Tables["tbl_students"].Rows.Add(dr);
                dataset.Tables["tbl_students"].Rows.RemoveAt(dataset.Tables["tbl_students"].Rows.Count - 1);
                dataGridView1.Rows.RemoveAt(dataGridView1.Rows.Count - 2);
                dataGridView1.Rows[e.RowIndex].Cells[5].Value = "Delete";
                sqlAdapter.Update(dataset, "tbl_students");
            }
            else if (Task == "Update")
            {
                int r = e.RowIndex;
                dataset.Tables["tbl_students"].Rows[r]["id"] = dataGridView1.Rows[r].Cells["id"].Value;
                dataset.Tables["tbl_students"].Rows[r]["name"] = dataGridView1.Rows[r].Cells["name"].Value;
                dataset.Tables["tbl_students"].Rows[r]["address"] = dataGridView1.Rows[r].Cells["address"].Value;
                dataset.Tables["tbl_students"].Rows[r]["phone"] = dataGridView1.Rows[r].Cells["phone"].Value;
                dataset.Tables["tbl_students"].Rows[r]["email"] = dataGridView1.Rows[r].Cells["email"].Value;
                sqlAdapter.Update(dataset, "tbl_students");
                dataGridView1.Rows[e.RowIndex].Cells[5].Value = "Delete";
            }
        }
    }
    catch (Exception ex) {
        MessageBox.Show(ex.Message);
    }           
 }

- Tiếp đến, ta viết sự kiện userAddRow để khi thêm một dòng mới vào cơ sở dữ liệu.

private void dataGridView1_UserAddedRow_1(object sender, DataGridViewRowEventArgs e)
 {
            try
            {
                int lastRow = dataGridView1.Rows.Count - 2;
                DataGridViewRow nRow = dataGridView1.Rows[lastRow];
                DataGridViewLinkCell linkCell = new DataGridViewLinkCell();
                dataGridView1[5, lastRow] = linkCell;
                nRow.Cells["Delete"].Value = "Insert";
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
 }

- Và cuối cùng chúng ta viết sự kiện khi double click vào datagridview để update một dòng dữ liệu.

private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
 {
            try
            {
                int lastRow = e.RowIndex  ;
                DataGridViewRow nRow = dataGridView1.Rows[lastRow];
                DataGridViewLinkCell linkCell = new DataGridViewLinkCell();
                dataGridView1[5, lastRow] = linkCell;
                nRow.Cells["Delete"].Value = "Update";
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); 
}     

- Vậy là kết thúc, bây giờ các bạn có thể chạy để test thử chương trình.

heartCám ơn các bạn đã theo dõi bài viết của mình.  Hãy like and share để ủng hộ chúng mình. heart

Download project Crub on Datagridview

 

THÔNG TIN TÁC GIẢ

BÀI VIẾT LIÊN QUAN

Lập trình ứng dụng thêm - xóa - sửa trực tiếp trên DataGridview (Crub database on DataGridview use Cshap)
Đăng bởi: Thảo Meo - Lượt xem: 57231 15:48:37, 29/11/2015C#   In bài viết

CÁC BÀI CÙNG CHỦ ĐỀ

Đọc tiếp
.