Chart控件中数据点与Grid列表交互分为:
1、点击Chart控件中数据点时,选中Grid列表中相应行;
2、选中Grid列表汇总相应行,选中Chart控件中相应数据点
3、控制相应数据线的显示
前台Chart源码
1 <asp:Chart ID="chAnalysis" Width="1025px" runat="server" BackGradientStyle="TopBottom" 2 BackSecondaryColor="White" BackColor="WhiteSmoke" ImageLocation="~/TempImages/ChartPic_#SEQ(300,3)" 3 Visible="False" OnClick="chAnalysis_Click"> 4 <Legends> 5 <asp:Legend IsTextAutoFit="false" LegendStyle="Row" Alignment="Center" Docking="Bottom" 6 Name="Default" BackColor="Transparent" Font="Arial, 6pt"> 7 </asp:Legend> 8 </Legends> 9 <Series> 10 <asp:Series Name="UpperLimit" ChartType="Line" Color="Red" BorderWidth="1"> 11 </asp:Series> 12 <asp:Series Name="LowerLimit" ChartType="Line" Color="Red" BorderWidth="1"> 13 </asp:Series> 14 </Series> 15 <ChartAreas> 16 <asp:ChartArea Name="ChartArea1" BorderColor="64,64,64,64" BackSecondaryColor="White" 17 BackColor="Gainsboro" ShadowColor="Transparent" BackGradientStyle="TopBottom"> 18 <Area3DStyle Rotation="0" Perspective="10" Inclination="15" IsRightAngleAxes="false" 19 WallWidth="0" IsClustered="false" /> 20 <AxisY LineColor="64,64,64,64"> 21 <LabelStyle IntervalType="Number" /> 22 <MajorGrid LineColor="64,64,64,64" /> 23 </AxisY> 24 <AxisX LineColor="64,64,64,64"> 25 <MajorGrid LineColor="64,64,64,64" /> 26 </AxisX> 27 </asp:ChartArea> 28 </ChartAreas> 29 </asp:Chart>
后台
1 #region 绑定Chart 2 /// <summary> 3 /// 绑定Chart 4 /// </summary> 5 public void BindChart() 6 { 7 if (ViewState["dt"] == null) { return; } 8 DataTable dtResult = (DataTable)ViewState["dt"]; 9 this.chAnalysis.Series["UpperLimit"].LegendText = "上限"; 10 this.chAnalysis.Series["UpperLimit"].ToolTip = "上限:#VALY"; 11 this.chAnalysis.Series["LowerLimit"].LegendText = "下限"; 12 this.chAnalysis.Series["LowerLimit"].ToolTip = "下限:#VALY"; 13 Dictionary<string, string> dict = (Dictionary<string, string>)ViewState["dict"]; 14 DataTable newdt = CreateWarnTable(); 15 decimal lowerLimit = decimal.Parse(dtResult.Rows[0]["MIN_LIMIT"].ToString());//下限 16 decimal upperLimit = decimal.Parse(dtResult.Rows[0]["MAX_LIMIT"].ToString());//上限 17 int k = 0; 18 foreach (KeyValuePair<string, string> item in dict) 19 { 20 DataRow[] dr = dtResult.Select(" ct_smp_workshop='" + item.Value + "'"); 21 if (k == 0) 22 { 23 if (dr != null && dr.Length > 0) 24 { 25 k = k + 1; 26 for (int i = 0; i < dr.Length; i++) 27 { 28 this.chAnalysis.Series["LowerLimit"].Points.AddXY(dr[i]["batch_name"].ToString(), dr[i]["MIN_LIMIT"].ToString()); 29 this.chAnalysis.Series["UpperLimit"].Points.AddXY(dr[i]["batch_name"].ToString(), dr[i]["MAX_LIMIT"].ToString()); 30 } 31 } 32 } 33 if (dr != null && dr.Length > 0) 34 { 35 Series s = new Series(); 36 s.Name = item.Value; 37 s.ChartType = SeriesChartType.Line; 38 s.PostBackValue = "#AXISLABEL" + "," + item.Value; 39 s.MarkerStyle = MarkerStyle.Square; 40 s.ToolTip = string.Format("生产线:{0}\n批次:#VALX\n结果:#VALY", item.Value); 41 for (int i = 0; i < dr.Length; i++) 42 { 43 DataRow drr = newdt.NewRow(); 44 s.Points.AddXY(dr[i]["batch_name"].ToString(), dr[i]["result_value"].ToString()); 45 decimal resultData = decimal.Parse(dr[i]["result_value"].ToString()); 46 drr["MIN_LIMIT"] = lowerLimit; 47 drr["MAX_LIMIT"] = upperLimit; 48 drr["result_value"] = resultData; 49 drr["batch_name"] = dr[i]["batch_name"].ToString(); 50 drr["component_name"] = dr[i]["component_name"].ToString(); 51 drr["ct_smp_workshop"] = item.Value; 52 if (resultData > upperLimit) 53 { 54 s.Points[i].MarkerColor = Color.Red; 55 newdt.Rows.Add(drr); 56 } 57 if (resultData < lowerLimit) 58 { 59 s.Points[i].MarkerColor = Color.Red; 60 newdt.Rows.Add(drr); 61 } 62 } 63 this.chAnalysis.Series.Add(s); 64 } 65 } 66 chAnalysis.Titles.Add("检测项目质量回顾分析"); 67 //获得最大值,最小值 68 DataView dv = dtResult.DefaultView; 69 dv.Sort = "result_value desc"; 70 double max = double.Parse(dv[0]["result_value"].ToString()); 71 double min = double.Parse(dv[dv.Count - 1]["result_value"].ToString()); 72 double step = Math.Round((max - min) / 3, 0); 73 double maxlimit = double.Parse(dtResult.Rows[0]["MAX_LIMIT"].ToString()); 74 double minlimit = double.Parse(dtResult.Rows[0]["MIN_LIMIT"].ToString()); 75 if (max < maxlimit) 76 { 77 max = maxlimit; 78 } 79 if (min > minlimit) 80 { 81 min = minlimit; 82 } 83 chAnalysis.ChartAreas[0].AxisY.Maximum = max + step; 84 chAnalysis.ChartAreas[0].AxisY.Minimum = min - step; 85 chAnalysis.ChartAreas[0].AxisY.Interval = step; 86 chAnalysis.ChartAreas[0].AxisX.Interval = 1; 87 this.chAnalysis.ChartAreas[0].AxisX.LabelStyle.Angle = 45; 88 89 this.GridView1.DataSource = newdt; 90 this.GridView1.DataBind(); 91 } 92 #endregion
背景色chart控件事件删除添加线绑定虚线
1 #region mouseover,mouseout背景色 2 /// <summary> 3 /// mouseover,mouseout背景色 4 /// </summary> 5 /// <param name="sender"></param> 6 /// <param name="e"></param> 7 protected void gv_RowDataBound(object sender, GridViewRowEventArgs e) 8 { 9 if (e.Row.RowType == DataControlRowType.DataRow) 10 { 11 e.Row.Attributes.Add("onclick", "this.style.backgroundColor='#ffffff'"); 12 } 13 } 14 #endregion 15 16 #region Chart 控件事件 17 /// <summary> 18 /// Chart 控件事件 19 /// </summary> 20 /// <param name="sender"></param> 21 /// <param name="e"></param> 22 protected void chAnalysis_Click(object sender, ImageMapEventArgs e) 23 { 24 string strValue = e.PostBackValue; 25 string[] arr = strValue.Split(','); 26 strValue = arr[0]; 27 string locationLine = arr[1]; 28 //int count = this.chAnalysis.Series.Count; 29 30 for (int i = 0; i < gv.Rows.Count; i++) 31 { 32 HiddenField hidWorkshop = (HiddenField)this.gv.Rows[i].FindControl("hidWorkshop"); 33 this.gv.Rows[i].BackColor = Color.White; 34 if (this.gv.DataKeys[i].Value.Equals(strValue) && hidWorkshop.Value == locationLine) 35 { 36 this.gv.Rows[i].BackColor = Color.Red; 37 } 38 } 39 this.chAnalysis.Visible = true; 40 this.panelch.Visible = true; 41 this.itable.Visible = true; 42 BindChart(); 43 for (int i = 0; i < this.chAnalysis.Series[locationLine].Points.Count; i++) 44 { 45 string xValue = this.chAnalysis.Series[locationLine].Points[i].AxisLabel.Trim(); 46 if (xValue == strValue) 47 { 48 this.chAnalysis.Series[locationLine].Points[i].MarkerColor = Color.Red; 49 this.chAnalysis.Series[locationLine].Points[i].MarkerSize = 8; 50 break; 51 } 52 } 53 BindDotLine(); 54 55 } 56 #endregion 57 58 #region 删除线或者添加线 59 /// <summary> 60 /// 删除线或者添加线 61 /// </summary> 62 /// <param name="sender"></param> 63 /// <param name="e"></param> 64 protected void btnCh_Click(object sender, EventArgs e) 65 { 66 BindChart(); 67 this.chAnalysis.Visible = true; 68 Dictionary<string, string> dict = (Dictionary<string, string>)ViewState["dict"]; 69 if (dict.Count <= 0) 70 { 71 return; 72 } 73 if (!chbox.Items[0].Selected) 74 { 75 foreach (KeyValuePair<string, string> item in dict) 76 { 77 this.chAnalysis.Series.Remove(this.chAnalysis.Series[item.Value]); 78 } 79 } 80 if (!chbox.Items[1].Selected) 81 { 82 for (int j = 0; j < this.chAnalysis.Series.Count; j++) 83 { 84 if (this.chAnalysis.Series[j].Name == "UpperLimit") 85 { 86 this.chAnalysis.Series.Remove(this.chAnalysis.Series[j]); 87 break; 88 } 89 } 90 } 91 if (!chbox.Items[2].Selected) 92 { 93 for (int j = 0; j < this.chAnalysis.Series.Count; j++) 94 { 95 if (this.chAnalysis.Series[j].Name == "LowerLimit") 96 { 97 this.chAnalysis.Series.Remove(this.chAnalysis.Series[j]); 98 break; 99 } 100 } 101 } 102 BindDotLine(); 103 104 } 105 #endregion 106 107 #region 绑定虚线 108 /// <summary> 109 /// 绑定虚线 110 /// </summary> 111 public void BindDotLine() 112 { 113 double d = 0.0; 114 if (!string.IsNullOrEmpty(this.txtLine.Text.Trim())) 115 { 116 if (!double.TryParse(this.txtLine.Text.Trim(), out d)) 117 { 118 return; 119 } 120 if (d > this.chAnalysis.ChartAreas[0].AxisY.Maximum) 121 { 122 return; 123 } 124 if (d < this.chAnalysis.ChartAreas[0].AxisY.Minimum) 125 { 126 return; 127 } 128 Series sline = new Series(); 129 sline.Name = "xuxian"; 130 sline.ChartType = SeriesChartType.Line; 131 sline.BorderDashStyle = ChartDashStyle.Dot; 132 if (ViewState["dt"] == null) { return; } 133 DataTable dtResult = (DataTable)ViewState["dt"]; 134 for (int i = 0; i < dtResult.Rows.Count; i++) 135 { 136 sline.Points.AddXY(dtResult.Rows[i]["batch_name"].ToString(), d); 137 } 138 sline.LegendText = "虚线"; 139 this.chAnalysis.Series.Add(sline); 140 } 141 } 142 #endregion
grid 引起chart数据点变化
1 #region grid 引起chart数据点变化 2 /// <summary> 3 /// grid 引起chart数据点变化 4 /// </summary> 5 /// <param name="sender"></param> 6 /// <param name="e"></param> 7 protected void gv_SelectedIndexChanging(object sender, GridViewSelectEventArgs e) 8 { 9 BindChart(); 10 HiddenField hidWorkshop = (HiddenField)this.gv.Rows[e.NewSelectedIndex].FindControl("hidWorkshop"); 11 HiddenField hidBatchname = (HiddenField)this.gv.Rows[e.NewSelectedIndex].FindControl("hidBatchname"); 12 int index = e.NewSelectedIndex; 13 14 for (int i = 0; i < this.chAnalysis.Series[hidWorkshop.Value].Points.Count; i++) 15 { 16 this.gv.Rows[i].BackColor = Color.White; 17 string yValue = this.chAnalysis.Series[hidWorkshop.Value].Points[i].AxisLabel.Trim(); 18 if (yValue == hidBatchname.Value) 19 { 20 this.gv.Rows[index].BackColor = Color.Red; 21 this.chAnalysis.Series[hidWorkshop.Value].Points[i].MarkerSize = 8; 22 this.chAnalysis.Series[hidWorkshop.Value].Points[i].MarkerColor = Color.Red; 23 } 24 } 25 this.chAnalysis.Visible = true; 26 this.panelch.Visible = true; 27 } 28 #endregion