CommandField – Edit/Delete, Update/Cancel trên GridView – Phần 2

Chào mọi người để tiếp tục chương trình sau phần 1 sử dụng gridview hôm nay chúng ta sẽ làm công việc cực kỳ thú vị đó làm việc với CommandField Edit/Delete, Update/Cancel trong GridView một trong những sự kiện chính của DataGridView trong Thiết kế web ASP.Net.

Không dài dòng chúng ta sẽ tiến hành vào vấn đề chính lun! Hôm trước chúng ta đã đổ dữ liệu vào grid rồi bây giờ sẽ edit, update tại dòng đang xét.

Muốn là được điều này thì GridView bạn phải có field nào đó là DataKey để dựa vào đó để xét. Ở đây mình vẫn làm típ vi dụ ở bài Thêm xóa sửa trong ASP.Net để tiện cho mình và các bạn, do đó Key của chúng ta là Mã SV, bạn chọn vào gridview click phải chọn properties tại dòng DataKeyName như trong hình sau.

Đặt DataKeyNames cho GridView

Đặt DataKeyNames cho GridView

Qui trình Edit/Delete, Update/Cancel

Bạn sẽ hình dung ra vấn đề ta cần xử lý như sau: Giao diện sẽ có nut Edit vào Delete, Bạn bấm vào Delete thì sẽ chạy sự kiện RowDeleting. Bạn bấm vào Edit sẽ chạy sự kiện RowEditing đồng thời sẽ hiển thị hai nút, Update và Cancel nếu bấm Update thì chạy sự kiện RowUpdating nếu bấm Cancel Thì chạy sự kiện RowCancelingEdit.

Đường đi của CommandField trong GridView

Đường đi của CommandField trong GridView

Bây giờ ta thống kê được 4 sự kiện đó và tiến hành cài đặt cho 4 sự kiện đó. Bạn click vào GridView properties lên chọn qua tab Events (Dấu sấm sét trong hình). Chọn vào các sự kiện như trong hình và Enter (Nhớ là có hậu tố ing không chọn sự kiện hâu tố ed).

Các sự kiện Edit Delete Update Cancel  trong GridView

Các sự kiện Edit Delete Update Cancel trong GridView

Bây giờ sẽ xử lý sự kiện nào dễ làm trước 😀

Sự kiên RowEditing trên GridView

Bạn vào trong sự kiện này gõ vào đoạn mã sau:

    protected void gvSinhVien_RowEditing(object sender, GridViewEditEventArgs e)
    {
        gvSinhVien.EditIndex = e.NewEditIndex;
        load_data();
    }

Đoạn code trên khi bấm vào Edit mở ra một đối tượng edit NewEditIndex đồng thời load dữ liệu lên GridView.

Sự kiện RowCancelingEdit trên GridView

Sự kiện này khi bấm vào nút Edit mà chúng ta không Update mà Cancel thì xử lý tại đây.

    protected void gvSinhVien_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        gvSinhVien.EditIndex = -1;
        load_data();
    }
Sự kiên RowDeleting trên GridView

Hai sự kiện kia quá dễ đến đây mới khó khăn hơn 1 tí. 😀 bạn xem đoạn code sau:

    protected void gvSinhVien_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        int id = int.Parse(gvSinhVien.DataKeys[e.RowIndex].Value.ToString());
        SqlConnection con = new SqlConnection("server=.;database=bcdonlinesv;Integrated security=true;");
        SqlCommand cmd = new SqlCommand("delete from sinhvien where masv='" + id + "'", con);
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
        load_data();
    }

Bạn thấy lúc này đã đụng đến DataKeys vì xóa thì phải xác định vị trí khóa chính.

  • e.RowIndex: Xét tại dòng đang xử lý
  • int.Parse: Chuyển về kiểu dữ liệu là int
  • ExecuteNonQuery: Thực thi truy vấn trong Command
Sự kiện RowUpdating trên GridView

Đây là sự kiện phức tạp nhất trong 4 sự kiện mà ta xét trong bài hôm nay.

    protected void gvSinhVien_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        int id = int.Parse(gvSinhVien.DataKeys[e.RowIndex].Value.ToString());
        string ten = (gvSinhVien.Rows[e.RowIndex].Cells[1].Controls[0] as TextBox).Text;
        string ngaysinh = (gvSinhVien.Rows[e.RowIndex].Cells[2].Controls[0] as TextBox).Text;
        string gioitinh = ((DropDownList)gvSinhVien.Rows[e.RowIndex].FindControl("drlGioiTinh")).SelectedValue;
        string diachi = (gvSinhVien.Rows[e.RowIndex].Cells[4].Controls[0] as TextBox).Text;
        string dt = (gvSinhVien.Rows[e.RowIndex].Cells[5].Controls[0] as TextBox).Text;
        string email = (gvSinhVien.Rows[e.RowIndex].Cells[6].Controls[0] as TextBox).Text;
        SqlConnection con = new SqlConnection("server=.;database=bcdonlinesv;Integrated security=true;");
        SqlCommand cmd = new SqlCommand("update sinhvien set tensv='" + ten + "',ngaysinh='" + ngaysinh + "',phai='" + gioitinh + "', diachi='" + diachi + "',dienthoai='" + dt + "',email='" + email + "' where masv='" + id + "'", con);
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
        gvSinhVien.EditIndex = -1;
        load_data();
    }

Giải thích: Mọi sự dữ liệu lấy được từ một cột dữ liệu trên GridView sẽ là một biến vào tùy vào ứng với field nào trong CSDL mà ta có kiểu dữ liệu cho hợp lệ.

  • Khóa chính thì là như trên ta lấy từ DataKey trên GridView.
  • Cells[vitri]: Đây là vị trí của cột đánh số thứ tự 0 – n
  • Controls[vitri]: Xét trong Cells xử lý control thứ bao nhiu cũng đánh số từ 0 – n, ở đây trong mỗi field đều có 1 control nên đánh số là 0.
  • as TextBox: Đối tương TextBox
  • FindControl: Tìm đến control có tên như khai báo
  • gvSinhVien.EditIndex = -1: Cho phép bấm Update sẽ thoát khỏi tình trạng Edit.
  • load_data(): Load lại dữ liệu sau khi update.

Kết luận: Vậy là xong phần xử lý các button Sửa, xóa … trên dòng của GridView. Trong đây còn rất nhiều việc để nói, và các bạn tìm hiểu thêm nha!

File Bài làm: Ví dụ Download

VN:F [1.9.22_1171]
Rating: 8.6/10 (18 votes cast)
CommandField - Edit/Delete, Update/Cancel trên GridView - Phần 2, 8.6 out of 10 based on 18 ratings
Share This