Xin chào các bạn, bài viết hôm nay mình chia sẻ các bạn source code lập trình kết nối cơ sở dữ liệu sqlserver sử dụng Listview trên lập trình c#, winform.
Trong các ví dụ trước mình cũng đã có hướng dẫn các bài viết về thêm xóa sửa, nhưng trong các bài đó mình sử dụng DataGridView.
Ở bài viết này, mình sẻ thực hiện trên Listview C# Winform
Video demo ứng dụng CRUD Listview Sqlserver Winform:
Ở bài demo này bao gồm các chức năng sau:
- Thêm dữ liệu
- Lưu dữ liệu
- Xóa dữ liệu
- Cập nhật chỉnh sửa
- Kiểm tra trùng mã sinh viên
- Tạo mã tự động
- Trigger chỉ cho phép nhập số vào trên ô textbox Học Bổng
Full source code c#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Lession2
{
public partial class FrmMain : Form
{
private readonly string CONNECTION_STRING = "Server=(local);Database=Lession2;Trusted_Connection=True;";
private int _current_index_listview;
public FrmMain()
{
InitializeComponent();
txt_ngaysinh.Format = DateTimePickerFormat.Custom;
txt_ngaysinh.CustomFormat = "dd 'tháng' MM 'năm' yyyy";
}
private void FrmMain_Load(object sender, EventArgs e)
{
LoadLopHoc();
LoadData();
}
private void LoadData(int _currentIndex = 0)
{
var table_sinhvien = GetListStudent();
DisplayDataToListView(table_sinhvien);
if (table_sinhvien.Rows.Count > 0)
{
lst_danhsach.Items[_currentIndex].Selected = true;
_current_index_listview = _currentIndex;
}
else
{
btn_xoa.Enabled = false;
btn_sua.Enabled = false;
txt_masv.Text = "";
txt_tensv.Text = "";
txt_hocbong.Text = "";
txt_ngaysinh.Value = DateTime.Now;
}
}
private void DisplayDataToListView(DataTable data)
{
lst_danhsach.Items.Clear();
foreach (DataRow row in data.Rows)
{
ListViewItem item = new ListViewItem(row[0].ToString());
for (int i = 1; i < data.Columns.Count; i++)
{
item.SubItems.Add(row[i].ToString());
}
lst_danhsach.Items.Add(item);
}
}
private DataTable GetListStudent()
{
using (var conn = new SqlConnection(CONNECTION_STRING))
{
conn.Open();
var commandText = @"SELECT sv.masv, sv.tensv, FORMAT(sv.ngaysinh,'dd/MM/yyyy') as ngaysinh_text, gt.tengioitinh, sv.hocbong, lh.tenlop, sv.malop, sv.magioitinh, sv.ngaysinh FROM tbl_sinhvien sv
INNER JOIN tbl_gioitinh gt
ON sv.magioitinh = gt.magioitinh
INNER JOIN tbl_lophoc lh
ON sv.malop = lh.malop";
using (var cmd = new SqlCommand(commandText, conn))
{
var da = new SqlDataAdapter();
da.SelectCommand = cmd;
var ds = new DataSet();
da.Fill(ds);
return ds.Tables[0];
}
}
}
private void LoadLopHoc()
{
using(var conn = new SqlConnection(CONNECTION_STRING))
{
conn.Open();
var commandText = "SELECT malop, tenlop FROM tbl_lophoc";
using (var cmd = new SqlCommand(commandText, conn))
{
var da = new SqlDataAdapter();
da.SelectCommand = cmd;
var ds = new DataSet();
da.Fill(ds);
cb_lophoc.DataSource = ds.Tables[0];
cb_lophoc.DisplayMember = "tenlop";
cb_lophoc.ValueMember = "malop";
}
}
}
private void btn_thoat_Click(object sender, EventArgs e)
{
var dlg = MessageBox.Show("Bạn có chắc chắn muốn đóng ứng dụng?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if(dlg == DialogResult.Yes)
{
Application.Exit();
}
}
private void lst_danhsach_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
var sinhvien = e.Item;
txt_masv.Text = sinhvien.SubItems[0].Text;
txt_tensv.Text = sinhvien.SubItems[1].Text;
txt_ngaysinh.Text = sinhvien.SubItems[2].Text;
txt_hocbong.Text = sinhvien.SubItems[4].Text;
if(sinhvien.SubItems[3].Text.Equals("Nam"))
{
rad_nam.Checked = true;
}
else
{
rad_nu.Checked = true;
}
cb_lophoc.SelectedValue = sinhvien.SubItems[6].Text;
btn_them.Enabled = true;
btn_luu.Enabled = false;
btn_xoa.Enabled = true;
btn_sua.Enabled = true;
_current_index_listview = e.ItemIndex;
}
public string GetCodeStudentAuto()
{
using (var conn = new SqlConnection(CONNECTION_STRING))
{
conn.Open();
var commandText = $@"SELECT CONCAT('SV', RIGHT(CONCAT('0000',ISNULL(right(max(masv),4),0) + 1),4))
FROM dbo.tbl_sinhvien where masv like 'SV%'";
using (var cmd = new SqlCommand(commandText, conn))
{
return cmd.ExecuteScalar().ToString();
}
}
}
private void btn_them_Click(object sender, EventArgs e)
{
btn_luu.Enabled = true;
btn_them.Enabled = false;
btn_sua.Enabled = false;
btn_xoa.Enabled = false;
txt_masv.Text = "";
txt_tensv.Text = "";
txt_ngaysinh.Value = DateTime.Now;
txt_hocbong.Text = "";
txt_masv.Text = GetCodeStudentAuto();
txt_tensv.Focus();
}
private void btn_luu_Click(object sender, EventArgs e)
{
var masv = txt_masv.Text;
var tensv = txt_tensv.Text;
var ngaysinh = txt_ngaysinh.Value;
var hocbong = txt_hocbong.Text;
var magioitinh = rad_nu.Checked == true ? 1 : 0;
var malop = cb_lophoc.SelectedValue.ToString();
if (string.IsNullOrEmpty(masv))
{
MessageBox.Show("Bạn chưa nhập mã sinh viên", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
txt_masv.Focus();
return;
}
if(masv.Length > 6)
{
MessageBox.Show("Bạn sinh viên chỉ tối đa 6 ký tự", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
txt_masv.Focus();
return;
}
//kiểm tra trùng mã
var isExists = CheckCodeIsExisted(masv);
if (isExists)
{
MessageBox.Show($"Mã sinh viên {masv} đã tồn tại.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
txt_masv.Focus();
return;
}
if (string.IsNullOrEmpty(tensv))
{
MessageBox.Show($"Bạn chưa nhập tên sinh viên", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
txt_tensv.Focus();
return;
}
using (var conn = new SqlConnection(CONNECTION_STRING))
{
conn.Open();
var commandText = $"INSERT INTO tbl_sinhvien(masv, tensv, ngaysinh, malop, magioitinh, hocbong) VALUES(@masv, @tensv, @ngaysinh, @malop, @magioitinh, @hocbong)";
using (var cmd = new SqlCommand(commandText, conn))
{
cmd.Parameters.AddWithValue("@masv", masv);
cmd.Parameters.AddWithValue("@tensv", tensv);
cmd.Parameters.AddWithValue("@ngaysinh", ngaysinh);
cmd.Parameters.AddWithValue("@hocbong", hocbong);
cmd.Parameters.AddWithValue("@magioitinh", magioitinh);
cmd.Parameters.AddWithValue("@malop", malop);
var affectedRow = cmd.ExecuteNonQuery();
if (affectedRow > 0)
{
LoadData();
btn_them.Enabled = true;
btn_luu.Enabled = false;
btn_sua.Enabled = true;
btn_xoa.Enabled = true;
//MessageBox.Show($"Đã thêm sinh viên {tensv} thành công.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show($"Thêm dữ liệu thất bại.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
private bool CheckCodeIsExisted(string masv)
{
using (var conn = new SqlConnection(CONNECTION_STRING))
{
conn.Open();
var commandText = $"SELECT count(*) FROM tbl_sinhvien WHERE masv='{masv}'";
using (var cmd = new SqlCommand(commandText, conn))
{
return Convert.ToInt32(cmd.ExecuteScalar()) > 0;
}
}
}
private void txt_hocbong_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = e.KeyChar != (char)Keys.Back && !char.IsDigit(e.KeyChar);
}
private void btn_xoa_Click(object sender, EventArgs e)
{
var masv = txt_masv.Text;
if (!string.IsNullOrEmpty(masv))
{
var dlg = MessageBox.Show($"Bạn có chắn chắn muốn xóa sinh viên {txt_tensv.Text} ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if(dlg == DialogResult.Yes)
{
using (var conn = new SqlConnection(CONNECTION_STRING))
{
conn.Open();
var commandText = $"DELETE From tbl_sinhvien where masv='{masv}'";
using (var cmd = new SqlCommand(commandText, conn))
{
var affectedRow = cmd.ExecuteNonQuery();
if (affectedRow > 0)
{
LoadData();
}
else
{
MessageBox.Show($"Xóa dữ liệu thất bại.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
}
}
private void btn_sua_Click(object sender, EventArgs e)
{
var masv = txt_masv.Text;
var tensv = txt_tensv.Text;
var ngaysinh = txt_ngaysinh.Value;
var hocbong = txt_hocbong.Text;
var magioitinh = rad_nu.Checked == true ? 1 : 0;
var malop = cb_lophoc.SelectedValue.ToString();
if (string.IsNullOrEmpty(masv))
{
MessageBox.Show("Bạn chưa nhập mã sinh viên", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
txt_masv.Focus();
return;
}
if (masv.Length > 6)
{
MessageBox.Show("Bạn sinh viên chỉ tối đa 6 ký tự", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
txt_masv.Focus();
return;
}
//kiểm tra trùng mã
var isExists = CheckCodeIsExisted(masv);
if (!isExists)
{
MessageBox.Show($"Mã sinh viên {masv} không tồn tại.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
txt_masv.Focus();
return;
}
if (string.IsNullOrEmpty(tensv))
{
MessageBox.Show($"Bạn chưa nhập tên sinh viên", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
txt_tensv.Focus();
return;
}
using (var conn = new SqlConnection(CONNECTION_STRING))
{
conn.Open();
var commandText = $"UPDATE tbl_sinhvien SET tensv=@tensv, ngaysinh=@ngaysinh, malop=@malop, magioitinh=@magioitinh, hocbong =@hocbong WHERE masv=@masv";
using (var cmd = new SqlCommand(commandText, conn))
{
cmd.Parameters.AddWithValue("@masv", masv);
cmd.Parameters.AddWithValue("@tensv", tensv);
cmd.Parameters.AddWithValue("@ngaysinh", ngaysinh);
cmd.Parameters.AddWithValue("@hocbong", hocbong);
cmd.Parameters.AddWithValue("@magioitinh", magioitinh);
cmd.Parameters.AddWithValue("@malop", malop);
var affectedRow = cmd.ExecuteNonQuery();
if (affectedRow > 0)
{
LoadData(_current_index_listview);
}
else
{
MessageBox.Show($"Chỉnh sửa dữ liệu thất bại.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
}
}