You are on page 1of 6

Quản Lý Danh Mục Lớp

bảng lớp (malop, makhoa, manganh, tenlop, gvcn, sdt)


khóa chính : malop
khóa ngoài : makhoa liên kết đến makhoa trên bảng khoa
manganh liên kết đến manganh trên bảng chuyennganh
Do đó khi hiển thị nội dung Khóa hoặc chuyên ngành, ta muốn hiện tên chứ không
hiện mã. Ta sử dụng công cụ ComboBox để làm việc, comboBox có 3 thuộc tính :
- DataSource : lấy nguồn dữ liệu (datatable giống DataGridView)
- DisplayMember : tên trường sẽ hiển thị nội dung (tenkhoa, tennganh)
- ValueMember : tên trường ẩn bên dưới để làm việc (makhoa, manganh)
Để truy xuất giá trị trên comboBox, ta có thuộc tính :
- Text : lấy ra nội dung đang hiển thị (tên)
- SelectedValue.ToString() : lấy giá trị ẩn bên dưới (mã)
Để không cho phép chỉnh sửa nội dung trên comboBox, dùng thuộc tính
- DropDownStyle : DropDownList

Bước 1 : lấy nguồn khóa cho comboBox : cboKhoaTim


a, khai báo biến :
SqlConnection conn;
SqlDataAdapter daKhoaTim;
DataTable dtKhoaTim;
string sql = "", makhoatim = "";
b, viết thủ tục
public void laynguoncboTim()
{
daKhoaTim = new SqlDataAdapter("Select * from khoa", conn);
dtKhoaTim = new DataTable();
daKhoaTim.Fill(dtKhoaTim);

cboKhoaTim.DataSource = dtKhoaTim;
cboKhoaTim.DisplayMember = "Tenkhoa";
cboKhoaTim.ValueMember = "Makhoa";
}
c, gọi trong form load
conn = KetNoi.ConnectDB();
laynguoncboTim();
Bước 2 : lấy nguồn cho DataGrid :
trường hợp 1 : nếu makhoatim rỗng thì hiển thị tất cả các lớp :
select * from lop
trường hợp 2 : nếu có makhoatim thì tìm các lớp theo khóa đó
select * from lop where makhoa = N’makhoatim’
a, viết thủ tục lấy nguồn :
public void laynguon()
{
if (makhoatim == "")
sql = "Select * from lop";
else
sql = "Select * from lop where makhoa = N'" + makhoatim + "'";
da = new SqlDataAdapter(sql, conn);
dt = new DataTable();
da.Fill(dt);
dgDanhMuc.DataSource = dt;
lblThongbao.Text = "Có " + dgDanhMuc.RowCount + " lớp.";
}
b, lấy nguồn khi form load
makhoatim = "";
laynguon();
c, khi chọn combo, khi hiện tất cả
private void cboKhoaTim_SelectedIndexChanged(object sender, EventArgs e)
{
makhoatim = cboKhoaTim.SelectedValue.ToString();
laynguon();
}

private void cmdHienToanBo_Click(object sender, EventArgs e)


{
makhoatim = "";
laynguon();
}
Bước 3 : thiết kế các ô text, combo để hiển thị dữ liệu khi người dùng bấm vào
datagridview
- thiết kế textbox, đặt tên
- thiết kế combo, đặt tên, lấy nguồn cboKhoa, cboNganh
khai báo : daKhoa, daNganh, dtKhoa, dtNganh, vt
a, viết thủ tục lấy nguồn combo và gọi trong form load :
private void Form1_Load(object sender, EventArgs e) { laynguonCBO(); }
public void laynguonCBO()
{
daKhoa = new SqlDataAdapter("Select * from khoa", conn);
dtKhoa = new DataTable();
daKhoa.Fill(dtKhoa);

cboKhoa.DataSource = dtKhoa;
cboKhoa.DisplayMember = "Tenkhoa";
cboKhoa.ValueMember = "Makhoa";

daNganh = new SqlDataAdapter("Select * from chuyennganh", conn);


dtNganh = new DataTable();
daNganh.Fill(dtNganh);

cboNganh.DataSource = dtNganh;
cboNganh.DisplayMember = "TenNganh";
cboNganh.ValueMember = "MaNganh";
}
b, viết thủ tục khi bấm chuột vào DataGrid
private void dgDanhMuc_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
try
{
if (dgDanhMuc.RowCount > 0)
{
if (e.RowIndex >= 0)
{
DataGridViewRow row = dgDanhMuc.Rows[e.RowIndex];
txtMaLop.Text = row.Cells[0].Value.ToString();
cboKhoa.SelectedValue = row.Cells[1].Value.ToString();
cboNganh.SelectedValue = row.Cells[2].Value.ToString();
txtTenLop.Text = row.Cells[3].Value.ToString();
txtGVCN.Text = row.Cells[4].Value.ToString();
txtSDT.Text = row.Cells[5].Value.ToString();
}
}
}
catch (Exception ev) { }
}
Bước 4 : thiết kế các nút lệnh thêm, sửa, xóa, ghi, không. viết thủ tục khóa mở và
gọi thủ tục trong form load.
private void Form1_Load(object sender, EventArgs e) { khoamo(true);}
public void khoamo(bool b)
{
cboKhoaTim.Enabled = b;
cmdHienToanBo.Enabled = b;

dgDanhMuc.Enabled = b;

txtMaLop.ReadOnly = b;
txtTenLop.ReadOnly = b;
txtGVCN.ReadOnly = b;
txtSDT.ReadOnly = b;

cboKhoa.Enabled = !b;
cboNganh.Enabled = !b;

cmdThem.Enabled = b;
cmdSua.Enabled = b;
cmdXoa.Enabled = b;

cmdGhi.Enabled = !b;
cmdKhong.Enabled = !b;
}
Bước 5 : Viết lệnh cho các nút : khai báo thêm biến ktThem và macu
bool ktThem = true;
string macu = "";
Viết thủ tục xóa trắng để xóa nội dung các ô Text
public void xoatrang()
{
txtMaLop.Text = ""; txtTenLop.Text = "";
txtGVCN.Text = ""; txtSDT.Text = "";
}
a, nút thêm :
private void cmdThem_Click(object sender, EventArgs e)
{
ktThem = true;
khoamo(false);
xoatrang(); txtMaLop.Focus();
}
b, nút sửa
private void cmdSua_Click(object sender, EventArgs e)
{
if (txtMaLop.Text == "") return;
macu = txtMaLop.Text;
ktThem = false;
khoamo(false);
txtMaLop.Focus();
}
c, nút xóa
private void cmdXoa_Click(object sender, EventArgs e)
{
if (txtMaLop.Text == "") return;
DialogResult kq = MessageBox.Show("Xóa lớp học " + txtTenLop.Text +
" không?", "Xóa", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (kq == DialogResult.Yes)
{
sql = "Delete from lop where malop = N'" + txtMaLop.Text + "'";
if (conn.State != ConnectionState.Open) conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
xoatrang();
laynguon();
}
}

d, nút không
private void cmdKhong_Click(object sender, EventArgs e)
{
khoamo(true);
dgDanhMuc_CellMouseClick(sender, vt);
}

e, nút ghi :
- kiểm tra dữ có bị rỗng không (mã, tên)
- kiểm tra tính hợp lệ : kiểu số, kiểu ngày, kiểu bit…
- kiểm tra trùng mã (kt khi thêm, khi sửa) :
viết thủ tục kiểm tra
- thực hiện ghi : viết câu lệnh insert hoặc update
- khóa điều khiển
- gọi lấy lại nguồn
bool ktThem = true;
string macu = "";
private void cmdGhi_Click(object sender, EventArgs e)
{
if (txtMaLop.Text == "") { txtMaLop.Focus(); return; }
if (txtTenLop.Text == "") { txtTenLop.Focus(); return; }
if (ktThem == true)
{
if (ktTrungThem(txtMaLop.Text)==true)
{
MessageBox.Show("trùng mã thêm.", "thông báo", MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);
return;
}
}
else
if (ktTrungSua(txtMaLop.Text) == true)
{
MessageBox.Show("trùng mã sửa.", "thông báo", MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);
return;
}
/*ghi chú : không cần viết vào code, thầy ghi chú để chép vở
1. cú pháp câu lệnh thêm : insert into tenbang(ds trường) values (ds giá trị)
insert into lop(malop,makhoa,manganh,tenlop,gvcn,sdt)
values(N'malop',N'makhoa',N'manganh',N'tenlop',N'gvcn',N'sdt')
insert into lop(malop,makhoa,manganh,tenlop,gvcn,sdt)
values(N'txtMaLop',N'cboKhoa',N'cboNganh',N'txtTenLop',N'txtGVCN',N'txtSDT')
thay thế bằng cách nối chuỗi :
txtMaLop sẽ thay bằng " + txtMaLop.Text + "
txtTenLop sẽ thay bằng " + txtTenLop.Text + "
cboKhoa sẽ thay bằng " + cboKhoa.SelectedValue.ToString()
+ "
câu lệnh sẽ trở thành
insert into lop(malop,makhoa,manganh,tenlop,gvcn,sdt) values(N'" +
txtMaLop.Text + "',N'" + cboKhoa.SelectedValue.ToString() +
"',N'" + cboNganh.SelectedValue.ToString() + "',N'" + txtTenLop.Text +
"',N'" + txtGVCN.Text + "',N'" + txtSDT.Text + "')

2. cú pháp câu lệnh cập nhật : update tenbang set trường 1 = giá trị 1,
trường 2=giá trị 2,... where mã = N'macu'
update lop set malop=N'',tenlop=N'',makhoa=N'',manganh=N'',gvcn=N'',sdt=N''
where malop = N'macu'
update lop set
malop=N'malop',tenlop=N'tenlop',makhoa=N'makhoa',manganh=N'manganh',gvcn=N'gvcn',sdt=N'sd
t' where malop = N'macu'
update lop set
malop=N'txtMaLop',tenlop=N'txtTenLop',makhoa=N'cboKhoa',manganh=N'cboNganh',gvcn=N'txtGVC
N',sdt=N'txtSDT' where malop = N'macu'
thay thế các điều khiển vào câu truy vấn
update lop set malop=N'" + txtMaLop.Text + "',tenlop=N'" + txtTenLop.Text +
"',makhoa=N'" + cboKhoa.SelectedValue.ToString() +
"',manganh=N'" + cboNganh.SelectedValue.ToString() + "',gvcn=N'" +
txtGVCN.Text + "',sdt=N'" + txtSDT.Text + "' where malop = N'" + macu + "'
*/
if (ktThem == true)
sql = "insert into lop(malop,makhoa,manganh,tenlop,gvcn,sdt) values(N'" +
txtMaLop.Text + "',N'" + cboKhoa.SelectedValue.ToString() +
"',N'" + cboNganh.SelectedValue.ToString() + "',N'" + txtTenLop.Text +
"',N'" + txtGVCN.Text + "',N'" + txtSDT.Text + "')";
else
sql = "update lop set malop=N'" + txtMaLop.Text + "',tenlop=N'" +
txtTenLop.Text + "',makhoa=N'" + cboKhoa.SelectedValue.ToString() +
"',manganh=N'" + cboNganh.SelectedValue.ToString() + "',gvcn=N'" +
txtGVCN.Text + "',sdt=N'" + txtSDT.Text + "' where malop = N'" + macu + "'";
if (conn.State != ConnectionState.Open) conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
khoamo(true);
laynguon();
}
public bool ktTrungThem(string manhap)
{
sql = "Select * from lop where malop=N'" + manhap + "'";
da = new SqlDataAdapter(sql, conn);
dt = new DataTable();
da.Fill(dt);
if (dt.Rows.Count > 0)
return true;
else
return false;
}
public bool ktTrungSua(string manhap)
{
sql = "Select * from lop where malop =N'" + manhap + "' and malop<> N'" +
macu + "'";
da = new SqlDataAdapter(sql, conn);
dt = new DataTable();
da.Fill(dt);
if (dt.Rows.Count > 0)
return true;
else
return false;
}

You might also like