zoukankan      html  css  js  c++  java
  • Chart控件中数据点与Grid列表交互

    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
  • 相关阅读:
    SHUOJ 1858 分裂的寄生兽
    POJ3057 Evacuation 解题报告
    POJ1149 PIGS 解题报告
    android与javaee通信:登录界面超级简化版
    如何实现服务器与mysql的远程通信?
    关于安卓和服务器通信的一点注意事项
    android中SQLite的基本操作
    jude的一些基本用法
    小项目难点分析
    小项目设想
  • 原文地址:https://www.cnblogs.com/hfliyi/p/2836323.html
Copyright © 2011-2022 走看看