- [DEVEXPRESS] Chia sẻ source code cách tạo biểu đồ sơ đồ tổ chức công ty Org Chart trên Winform C#
- [C#] Hướng dẫn tạo Auto Number trên Datagridview winform
- [DATABASE] Hướng dẫn tạo Procedure String Split in Mysql
- [C#] Thiết lập dấu (,) hay dấu (.) ở định dạng số đúng với định dạng số Việt Nam
- [C#] Chia sẻ source code Game Spin Lucky Wheel
- [C#] Hướng dẫn Encode and Decode HTML
- Danh sách tài khoản ChatGPT miễn phí - Hướng dẫn tạo tài khoản Chat Open AI GPT tại Việt Nam
- [C#] Hướng dẫn thay đổi giao diện ứng dụng Winform theo giao diện của Windows
- [VB.NET] Hiệu ứng Acrylic, Mica, Tabbed Blur Effect trên Winform
- [DEVEXPRESS] Hướng dẫn sử dụng HTML Template trên Combobox Edit
- [C#] Chia sẻ source code Orange Rain in Winform
- [DEVEXPRESS] Hướng dẫn sử dụng HTML Template trên XtraMessageBox Winform Devexpress 22.2.3
- [DEVEXPRESS] Hướng dẫn sử dụng HTML and CSS Code Viewer trên Winform
- [C#] Number Effect Counter up and down in winform
- [C#] Hướng dẫn Supend and Resume Process ID in Winform
- [C#] Hiển thị line number trên Richtextbox Winform
- [C#] Fake Blue Screen BSOD in winform
- [C#] Chia sẽ code demo sử dụng Async Parallel Foreach and For in Winform
- [C#] Sử dụng ActionBlock run X task at time winform
- [C#] Hướng dẫn sử dụng Property Grid để lưu và tải lại thông tin cấu hình user trên 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