- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- [SOFTWARE] Phần mềm gởi tin nhắn Zalo Marketing Pro giá rẻ mềm nhất thị trường
- [C#] Việt hóa Text Button trên MessageBox Dialog Winform
- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
- [C#] Hướng dẫn viết ứng dụng chat với Gemini AI Google Winform
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)
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.
Cá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.
Download project Crub on Datagridview