Gridviews绑定在pageload事件上,并且使用jquery-ajax方法(使用amcharts以及highcharts)通过调用WebMethod来显示图表.
最初我实现了这样一种方式,即在执行存储过程gridview绑定后,在webmethod内部也执行相同的sp来绘制图表.同样的sp对该页面执行两次(一个用于网格,另一个用于图表).10 sps需要执行网格和图表10.
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与该页面和所有的没有任何关系.请告诉我这个方法的回退.
解决方法
users will get the same result (last updated values).
您可以在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(); } }
>在单独的选项卡中打开这两个页面.
>刷新主页并检查列是否显示
>现在转到下一个选项卡(索引)并刷新它(为dt创建一个新的实例).它将影响datatable,现在你也可以在家里得到新的datatable.
所以如果这两个进程/页面同时被执行,那么这两个页面将获得最新的值.这就是为什么我会在并发测试中认识到这一点.
You can make use of a session in this case. Consider the following code:
家
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"]; } } }
原文地址:https://www.jb51.cc/csharp/96655.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。