c# – 使用与pagemethod和webmethod相同的datatable的区别
我正在尝试创建一个新网页,我需要为每个网格数据显示几乎10个不同的网格视图和图表.
Gridviews绑定在pageload事件上,并且使用jquery-ajax方法(使用amcharts以及highcharts)通过调用WebMethod来显示图表. 最初我实现了这样一种方式,即在执行存储过程gridview绑定后,在webmethod内部也执行相同的sp来绘制图表.同样的sp对该页面执行两次(一个用于网格,另一个用于图表).10 sps需要执行网格和图表10. 所以为了提高页面性能,我创建了这样的静态datatable static DataTable Report1; 并像这样绑定gridview. 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()); } } 并且在webmethod内部,我已经使用相同的datatable来绘制图表 [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); } 与此我可以显示网格和图表. 现在请说说,这是处理webmethods的正确方法吗?我已经读过该webmethod与该页面和所有的没有任何关系.请告诉我这个方法的回退. 如果这是错误的方法,请提供一些改进页面性能的想法? 解决方法
不,这不是正确的方法.由于您已将DataTable声明为静态(静态变量具有应用范围,无法实例化)
您可以在concurrency测试中实现. 请检查以下情况: 考虑dtbl是在主页上初始化的静态dataTable,并在索引页面上创建另一个“datatable”实例实例(两者都在页面加载中,如下所示). 家 public static DataTable dtbl; protected void Page_Load(object sender,EventArgs e) { if (!Page.IsPostBack) { dtbl = new DataTable(); dtbl.Columns.Add("id"); dtbl.Columns.Add("name"); for (int i = 0; i < 10; i++) { DataRow dr = dtbl.NewRow(); dr["id"] = i.ToString(); dr["name"] = i + 1; dtbl.Rows.Add(dr); } } } 索引页 protected void Page_Load(object sender,EventArgs e) { if (!Page.IsPostBack) { home.dtbl = new DataTable(); } } 现在在每个页面中放置一个断点并运行应用程序, >在单独的选项卡中打开这两个页面.
家 protected void Page_Load(object sender,EventArgs e) { if (!Page.IsPostBack) { dtbl = new DataTable(); dtbl.Columns.Add("id"); dtbl.Columns.Add("name"); for (int i = 0; i < 10; i++) { DataRow dr = dtbl.NewRow(); dr["id"] = i.ToString(); dr["name"] = i + 1; dtbl.Rows.Add(dr); } if (((DataTable)Session["MyDatatable"]).Columns.Count < 0) { Session["MyDatatable"] = dtbl; } else { dtbl = (DataTable)Session["MyDatatable"]; } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails-3 – 如何手动运行Sidekiq作业
- cocos2dx-3.3 网络编程(CURL+PHP) NO.1 写好PHP代码
- ruby-on-rails – 测试rails应用程序的最佳方法是什么?
- oracle – 在plsql中的过程中测量sql语句的时间
- 从数值范围生成正则表达式
- mobx和Redux有哪些优点和缺点,特别是在React-Native环境中?
- 接收List的C#泛型方法不会为实际类型的T调用重载方法(更喜欢
- 火云开发课堂 - 《使用Cocos2d-x 开发3D游戏》系列 第二十节
- Reactor and Proactor:介绍和比较
- ruby-on-rails – 通过cron问题加载rubygems的rake任务