ASP.Net: CommandField – Edit/Delete, Update/Cancel trên GridView – Phần 2

ASP.Net: 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).

ASP.Net: CommandField – Edit/Delete, Update/Cancel trên GridView – Phần 2

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!

Bạn thấy bài viết này như thế nào?: 
Average: 9 (1 vote)
Ảnh của Tommy Tran

Tommy owner Express Magazine

Drupal Developer having 9+ year experience, implementation and having strong knowledge of technical specifications, workflow development. Ability to perform effectively and efficiently in team and individually. Always enthusiastic and interseted to study new technologies

  • Skype ID: tthanhthuy

Bình luận (0)

 

Add Comment

Filtered HTML

  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Các thẻ HTML được chấp nhận: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Tự động ngắt dòng và đoạn văn.

Plain text

  • No HTML tags allowed.
  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Tự động ngắt dòng và đoạn văn.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Deepnet Explorer

10 browser đang được sử dụng nhiều nhất hiện nay

Gần đây, các hãng phát hành liên tục tung ra những phiên bản mới, cùng những công nghệ riêng, khiến cho cuộc chiến tranh giành thị phần giữa các trình duyệt web trở nên khốc liệt. Dựa vào số lượng người dùng và tính năng, website TopTenReviews đã chọn ra 10 đại diện sáng giá nhất dưới đây.

HTC One vẫn chỉ dừng lại ở rò rỉ thông tin giá bán

HTC One vẫn chỉ dừng lại ở rò rỉ thông tin giá bán

Thông tin về "siêu phẩm" điện thoại sắp ra mắt của HTC tiếp tục xuất hiện, lần này là hình ảnh về phiên bản màu đen và giá bán thông qua 4 nhà mạng lớn nhất thị trường Mỹ.

Cygwin – Giả lập hệ điều hành Linux trên Windows

Cygwin – Giả lập hệ điều hành Linux trên Windows

Bạn vẫn gắn bó với Windows nhưng cần dùng Linux để gia tăng hiệu suất công việc, hoặc đơn giản chỉ để làm quen với hệ điều hành mã nguồn mở nhiều hứa hẹn này?

Công ty diệt chuột T&C

 

Diet con trung