Thứ Bảy, 22 tháng 8, 2015

Sử dụng DataTable như bảng lưu trữ tạm thời trong ASP.Net

TRONG BÀI VIẾT NÀY TÔI SẼ GIẢI THÍCH LÀM THẾ NÀO ĐỂ SỬ DỤNG MỘT DATATABLE NHƯ MỘT BẢNG LƯU TRỮ TẠM THỜI TRONG ASP.NET ĐỂ LƯU TRỮ CÁC HỒ SƠ MÀ CHÚNG TÔI CẦN ĐỂ SỬ DUNG TRONG VIEWSTATE HOẶC BIẾN SESSION.

Khái niệm này là để tạo ra một DataTable năng động, lưu trữ một số giá trị trong nó và sau đó giữ các DataTable hoặc trong ViewState hoặc Session tùy thuộc vào việc bạn muốn nó chỉ trên trang web hoặc thông qua ứng dụng tương ứng. Để minh họa cho khái niệm này, tôi sẽ sử dụng một điều khiển ASP.Net GridView mà tôi sẽ thực hiện Chỉnh sửa và cập nhật các hoạt động và lưu các dữ liệu được cập nhật với các DataTable tạm thời.
 HTML

Bạn sẽ cần sử dụng thêm các thư viện sau
C#
using System.Data;
VB.NET
Imports System.Data


Xử lý Gridview với một DataTable động tạm thời
Bên trong hàm xử lý sự kiện tải trang của trang, tôi lần đầu tiên tạo ra một đối tượng tạm thời DataTable động, thêm cột vào nó và sau đó thêm một số dữ liệu vào DataTable.
Sau đó DataTable tạm thời năng động này được lưu trong một biến ViewState và cuối cùng nó được sử dụng để hiển thị trong GridView.
C#
VB.Net


Xử lý sự kiện OnRowEditing
Dưới đây là các OnRowEditing xử lý sự kiện đó sẽ được kích hoạt cho một dòng GridView khi nút chỉnh sửa bên trong hàng đó được nhấp.
Bên trong hàm xử lý sự kiện này, tôi thiết lập các GridView EditIndex với NewEditIndex lấy từ GridViewEditEventArgs và sau đó GridView là một lần nữa hiển thị từ các DataTable tạm thời được lưu trữ trong biến ViewState. Quá trình trên đặt GridView trong Edit Mode.
C#
protected void OnRowEditing(object sender, GridViewEditEventArgs e)
{
    GridView1.EditIndex = e.NewEditIndex;
    this.BindGrid();
}
VB.Net
Protected Sub OnRowEditing(sender As Object, e As GridViewEditEventArgs)
    GridView1.EditIndex = e.NewEditIndex
    Me.BindGrid()
End Sub
GridView Row Update và sự kiện Cancel Edit 
Dưới đây là các trình xử lý sự kiện cho các Cập nhật (Update ) và các nút hủy( Cancel) . Bên trong xử lý sự kiện Cập nhật , các DataTable tạm thời được lấy lại từ biến ViewState và sau đó hàng sẽ được cập nhật được xác định bằng cách sử dụng RowIndex của GridView Row có nút Update được nhấp. Sau đó, các giá trị được cập nhật được lấy từ các hộp văn bản và được giao cho các cột tương ứng của Row DataTable. Cuối cùng các DataTable tạm thời được lưu lại trong ViewState và GridView một lần nữa được hiển thị với các DataTable tạm thời cập nhật. Bên trong hàm xử lý sự kiện Cancel, GridView EditIndex được thiết lập để  -1 và GridView hiển thị với dữ liệu từ DataTable tạm thời lưu trong ViewState.
C#
protected void OnUpdate(object sender, EventArgs e)
{
    GridViewRow row = (sender as LinkButton).NamingContainer as GridViewRow;
    string name = (row.Cells[0].Controls[0] as TextBox).Text;
    string country = (row.Cells[1].Controls[0] as TextBox).Text;
    DataTable dt = ViewState[“dt”] as DataTable;
    dt.Rows[row.RowIndex][“Name”] = name;
    dt.Rows[row.RowIndex][“Country”] = country;
    ViewState[“dt”] = dt;
    GridView1.EditIndex = -1;
    this.BindGrid();
}
protected void OnCancel(object sender, EventArgs e)
{
    GridView1.EditIndex = -1;
    this.BindGrid();
}
VB.Net
Protected Sub OnUpdate(sender As Object, e As EventArgs)
    Dim row As GridViewRow = TryCast(TryCast(sender, LinkButton).NamingContainer, GridViewRow)
    Dim name As String = TryCast(row.Cells(0).Controls(0), TextBox).Text
    Dim country As String = TryCast(row.Cells(1).Controls(0), TextBox).Text
    Dim dt As DataTable = TryCast(ViewState(“dt”), DataTable)
    dt.Rows(row.RowIndex)(“Name”) = name
    dt.Rows(row.RowIndex)(“Country”) = country
    ViewState(“dt”) = dt
    GridView1.EditIndex = -1
    Me.BindGrid()
End Sub
Protected Sub OnCancel(sender As Object, e As EventArgs)
    GridView1.EditIndex = -1
    Me.BindGrid()
End Sub
 Nguồn : http://laptrinhasp.com/chuyen-muc/huong-dan-gridview-trong-lap-trinh-asp-net/