工作中点滴记录

永远保持学徒心态

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

 

posted on 2012-12-27 19:55  梦里故乡  阅读(1712)  评论(0编辑  收藏  举报