Tôi đang cố tạo một trang web mới nơi tôi cần hiển thị gần 10 lần xem lưới và biểu đồ khác nhau.Chúng ta có thể sử dụng cùng một datatable cho pagemethod và webmethod trong ASP.NET?
Gridviews được gắn vào sự kiện và biểu đồ tải trang được hiển thị bằng phương pháp jquery-ajax (sử dụng amcharts cũng như highcharts) bằng cách gọi WebMethod.
Ban đầu tôi đã triển khai trang theo cách sau khi thực hiện cùng một tập hợp các thủ tục được lưu trữ cho lưới xem (để hiển thị dữ liệu dạng xem lưới) và webmethods (đối với biểu đồ vẽ) .Sẽ cùng một lần được thực thi hai lần cho trang này (một cho lưới) và một cho biểu đồ) .Có 10 sps cần thiết để thực thi để tìm nạp dữ liệu.
Vì vậy, để cải thiện hiệu suất trang tôi đã tạo DataTable tĩnh như thế này
static DataTable Report1;
và binded GridView như thế này.
private void gvbindReport1()
{
try
{
Report1 = new DataTable();//refreshed datatable
DataSet ReportDS1 = objmvbl.GetReportGraph(ClientID, date_From, date_To);
if (ReportDS1.Tables.Count > 0)
{
Report1 = ReportDS1.Tables[0];//bindinding data to static datatable
}
GdReport.DataSource = Report1;
GdReport.DataBind();
}
catch (Exception ex)
{
Log.Errlog("Error Occured in gvbindReport1 : " + ex.Message.ToString());
}
}
và bên trong WebMethod tôi đã sử dụng DataTable cùng cho việc vẽ biểu đồ như thế này
[System.Web.Services.WebMethod]
public static string GetDataReport1()
{
System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
Dictionary<string, object> row;
try
{
//processing for the data inside static datatable
if (Report1.Rows.Count > 0)
{
foreach (DataRow dr in Report1.Rows)
{
row = new Dictionary<string, object>();
foreach (DataColumn col in Report1.Columns)
{
row.Add(col.ColumnName, dr[col]);
}
rows.Add(row);
}
}
}
catch (Exception ex)
{
Log.Errlog("Error Occured in GetDataReport WebMethod of Report Page : " + ex.Message.ToString());
}
return serializer.Serialize(rows);
}
với điều này tôi có thể hiển thị cả lưới và biểu đồ.
Bây giờ, hãy cho tôi biết, đây có phải là cách tiếp cận chính xác để xử lý webmethod không? tôi đã đọc rằng webmethod không có liên quan đến trang và all.Please Hãy cho tôi biết những hạn chế của phương pháp này.
Nếu điều này sai, Vui lòng đề xuất cách tốt hơn để cải thiện hiệu suất trang?
Có một điều là bạn không nên tự gọi 'JavaScriptSerializer'. Nếu bạn chỉ trả về 'List>' trực tiếp, ASP.NET sẽ xử lý serializing đó. Nó làm điều đó bất kể kiểu trả về của bạn, vì vậy mã hiện tại của bạn đang chạy 'JavaScriptSerializer' hai lần trên kết quả (và bạn phải phân tích cú pháp nó hai lần ở phía máy khách). Thông tin thêm: http://encosia.com/asp-net-web-services-mistake-manual-json-serialization/ –
@ Dave Ward: cảm ơn vì đã chỉ ra điều này. Bạn có thể cho biết cách đồng bộ hóa dữ liệu giữa trang và webmethod? – Athul
Bạn có thể sử dụng DataTables và sử dụng các lớp được nhập tĩnh và Danh sách chung thay thế không? –
sm14