Dundas控件绘图

 在实现绘图功能时找到了Dundas这个控件,用了一下感觉还不错。以下是利用该控件实现的绘图功能代码,由于刚用这个控件没多久,所以很多功能的实现可能走了很多弯路,以下代码仅作参考。

 

功能:实现动态绘图,通过鼠标点击改变点的纵坐标,右键弹出菜单实现对以下属性的设置:(1X轴坐标最大值最小值;(2Y轴坐标最大值最小值;(3X轴字体及大小;(4X轴显示数据的步长,即每几个点显示一次。

 

一,程序代码

getdata 和 button2_click中的代码可以无视

 

aspx文件:

<script language="JavaScript" >

 

  var x, y;

 function mouse()

 {

 

     x = event.clientX;

     y = event.clientY;

 

     if(event.button==1)

      {

        var   ObjHid   =   document.getElementById('hidValue');

        var str=event.srcElement.id;

        var index=str.indexOf("Chart");

        if(index>-1)

        {

           ObjHid.value=str;

           HID();

        }

     

       if(event.srcElement.id=="")

       {

          HID();

       }    

     }

     else if(event.button==2||event.button==0)   //右键

     {

        var   ObjHid   =   document.getElementById('hidValue');

        var str=event.srcElement.id;

        var index=str.indexOf("Chart");

        var snum,hidval; 

        if(index>-1)

        {

           ObjHid.value=str;

           snum=str.split("t");

           hidval="ChartHid"+snum[1];

           var   ObjValue=   document.getElementById(hidval).value;

           var   tmp   =   ObjValue.split(",");  

           document.getElementById ("textxmin").value=tmp[0];

           document.getElementById ("textxmax").value=tmp[1];

           document.getElementById ("Textmin").value=tmp[2];

           document.getElementById ("Textmax").value=tmp[3];

           document.getElementById ("Textmon").value=tmp[4];

           document.getElementById ("FontNameList").options[tmp[5]].selected=true;

           document.getElementById ("FontSizeList").options[tmp[6]].selected=true;

 

           popdialog();

        }

     }

  

 }

function popdialog()            //弹出菜单

 {

    var div=document.getElementById('conf');

    div.style.top = y+document.documentElement.scrollTop;

    div.style.left = x+document.documentElement.scrollLeft;

    div.style.display='block';

 }

 

 function HID()        //关闭菜单

 {

    var div=document.getElementById('conf');

    div.style.display="none";

 

 }

  </script>

 

//右健菜单///

<div id="conf" align="center" style=" FONT-SIZE: 12px; MARGIN-LEFT: auto; LINE-HEIGHT: 19px; MARGIN-RIGHT: auto; position:absolute;background-color:#EBEBEB;cursor:hand;left:291px;top:227px;display:none; border-right: #cccccc thin solid; border-top: #cccccc thin solid; border-left: #cccccc thin solid; border-bottom: #cccccc thin solid;z-index:10000; width: 291px; height: 257px;"  >

        <br></br>

        <span>

        <asp:Label ID="Label7" runat="server"  Text="X轴最小值"></asp:Label>

         <asp:TextBox ID="textxmin" runat="server" Width="65px"></asp:TextBox>

         <asp:Label ID="Label6" runat="server" Text="X轴最大值"></asp:Label>

         <asp:TextBox ID="textxmax" runat="server" Width="65px"></asp:TextBox><br />

        </span>

        <br />

        <span>

        <asp:label ID="Label2" runat="server" text="Y轴最小值"></asp:label>

           <asp:TextBox ID="Textmin" runat="server" Width="65px"></asp:TextBox>

        <asp:label ID="Label3" runat="server" text="Y轴最大值"></asp:label>

           <asp:TextBox ID="Textmax" runat="server" Width="65px"></asp:TextBox>&nbsp;

       </span>

       <br></br>

        <span>

            <asp:Label ID="Label4" runat="server" Text="X轴字体"></asp:Label>

            <asp:DropDownList ID="FontNameList" runat="server"  cssclass="spaceright"  Width="116px">

<asp:ListItem Value="Times New Roman" Selected="True">Times New Roman</asp:ListItem>

<asp:ListItem Value="Arial">Arial</asp:ListItem>

<asp:ListItem Value="Courier New">Courier New</asp:ListItem>

<asp:ListItem Value="Microsoft Sans Serif">Microsoft Sans Serif</asp:ListItem>

<asp:ListItem Value="Verdana">Verdana</asp:ListItem>

            </asp:DropDownList>

            <asp:Label ID="Label5" runat="server" Text="X轴字体大小"></asp:Label>

            <asp:DropDownList ID="FontSizeList" runat="server" cssclass="spaceright" Width="43px">

<asp:ListItem Value="4">4</asp:ListItem>

<asp:ListItem Value="6">6</asp:ListItem>

<asp:ListItem Value="8" Selected="True">8</asp:ListItem>

<asp:ListItem Value="10">10</asp:ListItem>

<asp:ListItem Value="12">12</asp:ListItem>

<asp:ListItem Value="14">14</asp:ListItem>

            </asp:DropDownList>&nbsp;

        </span>

        <br></br>

        <span>

        <asp:label ID="Label1" runat="server" text="时间间隔"> </asp:label>

           <asp:TextBox ID="Textmon" runat="server" Text="this.value" Width="91px"></asp:TextBox>&nbsp;

        </span>

        <br></br>

        <span>

            <asp:Button ID="Button7" runat="server" Text="确定" OnClick="Xaxis_Click" Height="21px" Width="49px" />

            <input id="Button5" style="width: 49px; height: 20px" type="button" value="取消" onclick="HID()" /></span></div>

     

cs文件:

using Dundas.Charting.WebControl;

using System.Drawing;

using System.Data.OracleClient;

using System.Text.RegularExpressions;

 

public partial class _Default : System.Web.UI.Page

{

    static int NUM, count, chartnum, seriesnum;    //NUM为当前选中的chart号;chartnum为要画的chart数;seriesnum为图中曲线数

    static string[,,] XV = new string[50,20,500];    //X轴坐标XV[chart号,曲线号,点]

    static double[,,] YV = new double[50,20,500];    //Y轴坐标

    static int[] xMIN = new int[50];                //Y轴最小值X[chart]

    static int[] xMAX = new int[50];                //Y轴最小值

    static int[] mon = new int[50];                 //时间间隔mon[chart]

    static int pointmax;                           //点总个数

    static int num,point;                          

    static double d1, d2;

    static double[] max = new double[50];           //Y轴最大值max[chart]

    static double[] min=new double[50];             //Y轴最小值

    static string SerStr;

    static string[] ZTstr = new string[50];         //字体

    static int[] Zdx = new int[50];                 //字体大小

 

    static string sqldy;

    static string sqlzb;

    static string tbxmin, tbxmax, tbymin, tbymax, sqlCX;

 

    protected void Page_Load(object sender, EventArgs e)

    {

 

        if (!IsPostBack)

        {

            count = 0;

            num = 0;   

           

            sqldy = Session["unit_chart_dy" + Server.MapPath("./").ToString()].ToString();

            sqlzb = Session["unit_chart_zb" + Server.MapPath("./").ToString()].ToString();

            chartnum = int.Parse(Session["unit_chart_count" + Server.MapPath("./").ToString()].ToString());

            seriesnum = int.Parse(Session["unit_chart_cbcount" + Server.MapPath("./").ToString()].ToString());

            tbxmin = Session["unit_chart_xmin" + Server.MapPath("./").ToString()].ToString();

            tbxmax = Session["unit_chart_xmax" + Server.MapPath("./").ToString()].ToString();

            tbymin = Session["unit_chart_ymin" + Server.MapPath("./").ToString()].ToString();

            tbymax = Session["unit_chart_ymax" + Server.MapPath("./").ToString()].ToString();

          

            sqlCX = sqldy.Substring(0, sqldy.Length - 1);

            sqlCX = sqlCX.Replace("'", "");

           

            getdata(sqldy,sqlzb);

            for (int i = 0; i < chartnum; i++)

            {

 

                if (tbymax != "") max[i] = double.Parse(tbymax);

                if (tbymin != "") min[i] = double.Parse(tbymin);

                mon[i] = int.Parse(tbxmax);

                xMIN[i] = 0;

                xMAX[i] = pointmax - 1;

                ZTstr[i] = "Times New Roman";   //字体

                Zdx[i] = 8;    //字大小

            }

 

            string[] unit_str = Session["oil_field_have_jdcx" + Server.MapPath("./").ToString()].ToString().Replace("'", "").Split(',');

            foreach (string x in unit_str)

            {

                ListItem lx1 = new ListItem();

                lx1.Text = x;

                lx1.Value = x;

                selectunit.Items.Add(lx1);

            }

 

            AddChart();

       }

 

        form1.Attributes.Add("onmousedown", "mouse();");

 

        string strRight = this.hidValue.Value;

        string[] arrRight = strRight.Split(new Char[] { 't' });

        if (arrRight.LongLength >= 2)

        {

            for (int i = 0; i < arrRight.Length; i++)

            {

                if (arrRight[i] != "" && arrRight[0] == "Char")

                {

                    NUM = int.Parse(arrRight[1]);

 

                }

            }

        }

     

    }

 

 

    protected void getdata(string sqldyname,string sqlzbname)    //获取数据库数据

    {

        sqldyname = sqldyname.Substring(0, sqldyname.Length - 1);

        sqlzbname = sqlzbname.Substring(0, sqlzbname.Length - 1);

        string sql_search;

        string[] find_jh = sqldyname.Split(',');

        sqlzbname = sqlzbname.Replace("'", "");

        string[] find_zb = sqlzbname.Split(',');

        string str;

 

        string[] chart_s = new string[100];

        string str_ny = "";

        if (Session["model_jdcx" + Server.MapPath("./").ToString()].ToString().Trim() == "month")

        {

            int add_time = Convert.ToInt32(tbxmin.Trim());

            while (add_time < Convert.ToInt32(Session["endtime_jdcx" + Server.MapPath("./").ToString()].ToString().Trim()) + 1)

            {

                chart_s[0] = chart_s[0] + Convert.ToString(add_time) + " /t ";

                str_ny += Convert.ToString(add_time) + ",";

                if ((Convert.ToString(add_time).Substring(4, 2)) == "12")

                    add_time = add_time + 100 - 11;

                else

                    add_time++;

            }

 

        }

        if (Session["model_jdcx" + Server.MapPath("./").ToString()].ToString().Trim() == "quarter")

        {

            int add_time = Convert.ToInt32(tbxmin.Trim());

            while (add_time < Convert.ToInt32(Session["endtime_jdcx" + Server.MapPath("./").ToString()].ToString().Trim()) - Convert.ToInt32(Session["endtime_jdcx" + Server.MapPath("./").ToString()].ToString().Trim().Substring(4, 2)) % 3 + 1)

            {

                chart_s[0] = chart_s[0] + Convert.ToString(add_time) + " /t ";

                str_ny += Convert.ToString(add_time) + ",";

                if ((Convert.ToString(add_time).Substring(4, 2)) == "12")

                    add_time = add_time + 100 - 9;

                else

                    add_time = add_time + 3;

            }

        }

        if (Session["model_jdcx" + Server.MapPath("./").ToString()].ToString().Trim() == "half")

        {

            int add_time = Convert.ToInt32(tbxmin.Trim());

            while (add_time < Convert.ToInt32(Session["endtime_jdcx" + Server.MapPath("./").ToString()].ToString().Trim()) - Convert.ToInt32(Session["endtime_jdcx" + Server.MapPath("./").ToString()].ToString().Trim().Substring(4, 2)) % 6 + 1)

            {

                chart_s[0] = chart_s[0] + Convert.ToString(add_time) + " /t ";

                str_ny += Convert.ToString(add_time) + ",";

                if ((Convert.ToString(add_time).Substring(4, 2)) == "12")

                    add_time = add_time + 100 - 6;

                else

                    add_time = add_time + 6;

            }

        }

        if (Session["model_jdcx" + Server.MapPath("./").ToString()].ToString().Trim() == "year")

        {

            int add_time = Convert.ToInt32(tbxmin.Trim());

            while (add_time < Convert.ToInt32(Session["endtime_jdcx" + Server.MapPath("./").ToString()].ToString().Trim()) - Convert.ToInt32(Session["endtime_jdcx" + Server.MapPath("./").ToString()].ToString().Trim().Substring(4, 2)) % 12 + 1)

            {

                chart_s[0] = chart_s[0] + Convert.ToString(add_time) + " /t ";

                str_ny += Convert.ToString(add_time) + ",";

                if ((Convert.ToString(add_time).Substring(4, 2)) == "12")

                    add_time = add_time + 100;

                else

                    add_time = add_time + 12;

            }

        }

        str_ny = str_ny.Substring(0, str_ny.Length - 1);

        string[] find_ny = str_ny.Split(',');

        for (int i = 0; i < chartnum; i++)

        {

            max[i] = 0;

            min[i] = 999999;

        }    

 

 

        int pointM=0;

        int find_index = 0;

        int find = 0;

        DataSet ds = new DataSet();

        for (int ofn_i = 0; ofn_i < seriesnum; ofn_i++)

        {

            sql_search = "select ny," + sqlzbname + " from  dbb01view t  where  dydm = " + find_jh[ofn_i] + " and NY>='" + tbxmin + "'" + Session["oil_field_search_jdcx" + Server.MapPath("./").ToString()].ToString() + "  NY<='" + Session["endtime_jdcx" + Server.MapPath("./").ToString()].ToString() + "' and lbdm='" + Session["modelselect_jdcx" + Server.MapPath("./").ToString()].ToString() + "'  order by dydm,ny asc";

            ds = GetData(sql_search);

 

            if (ds.Tables[0].Rows.Count != 0)

            {

                for (int i = 0; i < chartnum; i++)

                {

                    find = 0;

                    find_index = 0;

                    foreach (DataRow xx in ds.Tables[0].Rows)

                    {

 

                        for (int ii = find_index; ii < find_ny.Length; ii++)

                        {

                            if (find_ny[ii] == xx["ny"].ToString().Trim())

                            {

                                XV[i, ofn_i, find_index] = find_ny[ii];

                                str = "";

                                str = "" + find_zb[i] + "";

                                Regex r = new Regex(@"^[+-]?/d*(,/d{3})*(/./d+)?$");

                                if (xx[str].ToString() != "" && r.IsMatch(xx[str].ToString()))

                                {

                                    YV[i, ofn_i, find_index] = double.Parse(xx[str].ToString());

                                }

                                else YV[i, ofn_i, find_index] = 0;

                               

                                if (max[i] < YV[i, ofn_i, find_index]) max[i] = YV[i, ofn_i, find_index];

                                if (min[i] > YV[i, ofn_i, find_index]) min[i] = YV[i, ofn_i, find_index];

                                find++;

                                find_index++;

                                break;

                            }

                            else

                            {

 

                                XV[i, ofn_i, find_index] = find_ny[find_index];

                                YV[i, ofn_i, find_index] = 0;

                                if (max[i] < YV[i, ofn_i, find_index]) max[i] = YV[i, ofn_i, find_index];

                                if (min[i] > YV[i, ofn_i, find_index]) min[i] = YV[i, ofn_i, find_index];

                                find_index++;

                            }

                           

                        }

 

                    }

                    if (find_index < find_ny.Length)

                    {

                        for (int ii = find_index; ii < find_ny.Length; ii++)

                        {

                            XV[i, ofn_i, ii] = find_ny[ii];

                            YV[i, ofn_i, ii] = 0;

                            if (max[i] < YV[i, ofn_i, ii]) max[i] = YV[i, ofn_i, ii];

                            if (min[i] > YV[i, ofn_i, ii]) min[i] = YV[i, ofn_i, ii];

 

                        }

                    }

 

                }

 

            }

            else

            {

                for (int i = 0; i < chartnum; i++)

                {

                    for (int ii = 0; ii < find_ny.Length; ii++)

                    {

                        XV[i, ofn_i, ii] = find_ny[ii];

                        YV[i, ofn_i, ii] = 0;

                        if (max[i] < YV[i, ofn_i, find_index]) max[i] = YV[i, ofn_i, find_index];

                        if (min[i] > YV[i, ofn_i, find_index]) min[i] = YV[i, ofn_i, find_index];

                        find_index++;

                    }

                }

             }

 

        }

 

        for (int i = 0; i < chartnum; i++)

        {

            if (max[i] != min[i])

            {

                max[i] = max[i] + (max[i] - min[i]) / 5;

                min[i] = min[i] - (max[i] - min[i]) / 5;

            }

            else

            {

                max[i] = max[i] + 10;

                min[i] = min[i] - 10;

            }

        }

        pointmax = (int)(find_ny.Length);

    }

 

   

    protected void Chart1_Click(object sender, ImageClickEventArgs e)

    {

        int month = 0;

        int pointIndex = 0;

        Chart Chart = (Dundas.Charting.WebControl.Chart)this.form1.FindControl("Chart" + NUM);

      

        HitTestResult hitTestResult = Chart.HitTest(e.X, e.Y);

        if (num == 0)    //0代表没有选中要移动的点

        {

 

            if (hitTestResult != null)

            {              

                // Update chart title with the name of the last clicked chart element

                if (hitTestResult.ChartElementType == ChartElementType.DataPoint)

                {

                    SerStr = hitTestResult.Series.Name.ToString();

                    Chart.Series[SerStr].Points[hitTestResult.PointIndex].MarkerStyle = MarkerStyle.Square;

                    Chart.Series[SerStr].Points[hitTestResult.PointIndex].MarkerColor = Color.Red;

                    point = hitTestResult.PointIndex;

                    // SerStr = ser.Name.ToString();

                    num = 1;

                }

 

            }

 

        }

        else        //选中点移动

        {

 

          

            float value;

            if (hitTestResult != null)

            {

              //  Chart.ChartAreas["Default"].ReCalc();

                d1 = Chart.ChartAreas["Default"].AxisX.PixelPositionToValue(e.X);

                d2 = Chart.ChartAreas["Default"].AxisY.PixelPositionToValue(e.Y);

                value = (float)d2;

                Chart.Series[SerStr].Points[point].YValues[0] = Math.Round(value,2);

              

                int sernum;

                string strRight = SerStr;

                string[] arrRight = strRight.Split(new Char[] { 's' });

                if (arrRight.LongLength >= 2)

                {

                    sernum = int.Parse(arrRight[arrRight.LongLength - 1]);

                    YV[NUM, sernum - 1, xMIN[NUM] + mon[NUM] * point] = Math.Round(value, 2);

                }

 

            }

            num = 0;

        }

    }

 

 

    #region Web Form Designer generated code

    override protected void OnInit(EventArgs e)

    {

        //

        // CODEGEN: This call is required by the ASP.NET Web Form Designer.

        //

        InitializeComponent();

        base.OnInit(e);

    }

 

    /// <summary>

    /// Required method for Designer support - do not modify

    /// the contents of this method with the code editor.

    /// </summary>

    private void InitializeComponent()

    {

 

    }

    #endregion

 

 

   

 

    protected void chartdraw(int cnum)

    {

        Chart Chart = (Dundas.Charting.WebControl.Chart)this.form1.FindControl("Chart" + cnum);

 

       

        while(Chart.Series.Count >= 1)

        {

           Chart.Series.RemoveAt(Chart.Series.Count - 1);

        }

 

        string sqlcx = sqlCX;

        string[] find_jh = sqlcx.Split(',');

 

        for (int i = 0; i < seriesnum; i++)

        {

            string str = "Series" + (i + 1);

            Chart.Series.Add(str);

            Chart.Series[str].LegendText = find_jh[i];

            Chart.Legends["Default"].Docking = LegendDocking.Top;

          

        }

 

 

 

        Chart.ChartAreas["Default"].AxisY.Maximum = max[cnum];

        Chart.ChartAreas["Default"].AxisY.Minimum = min[cnum];

 

        Chart.ChartAreas["Default"].Area3DStyle.Enable3D = false;

        Chart.ChartAreas["Default"].AxisX.TitleAlignment = StringAlignment.Far;//设置X轴标题的名称所在位置位远

        Chart.ChartAreas["Default"].AxisX.Interval = 1;// mon[cnum];//设置AxisX坐标间隔数

      

        //字体设置

        Chart.ChartAreas["Default"].AxisX.LabelStyle.Font = new Font(ZTstr[cnum], Zdx[cnum]);

        Chart.ChartAreas["Default"].AxisX.LabelStyle.Enabled = true;

      

        int pointIndex = 0;

        int month;

 

        for (int i = 0; i < seriesnum; i++)

        {

            month = 0;

            pointIndex = xMIN[cnum];

            string str = "Series" + (i + 1);

            while (pointIndex <= xMAX[cnum])

            {

                Chart.Series[str].Points.AddXY(XV[cnum, i, pointIndex], YV[cnum, i, pointIndex]);

                Chart.Series[str].Points[month].MarkerStyle = MarkerStyle.Diamond;

                Chart.Series[str].Points[month].MarkerColor = Color.Blue;

                month++;

                pointIndex += mon[cnum];

 

            }

 

            Chart.Series[str].Type = SeriesChartType.Spline;

            //  Chart.Series[str].Color = Color.Black;

 

            // Set point labels

            Chart.Series[str].ShowLabelAsValue = true;

            Chart.Series[str]["ShowMarkerLines"] = "True";

            Chart.Series[str].BorderWidth = 1;

 

        }

          

 

    }

 

 

    private void AddChart()

    {

        string zdname = Session["unit_chart_zd" + Server.MapPath("./").ToString()].ToString();

        string[] find_zd = zdname.Split(',');

        count = 0;

        for (int i = 0; i < chartnum; i++)

        {

            HtmlTableRow tr = new HtmlTableRow();

            HtmlTableCell tc1 = new HtmlTableCell();

          

            Chart t = new Chart();

         

            t.ID = "Chart" + i;

            t.ChartAreas.Add("Default");

         

            for (int j = 0; j < seriesnum; j++)

            {

                string str = "Series" + (j + 1);

                t.Series.Add(str);

               

               

            }

          

            t.Click += new ImageClickEventHandler(Chart1_Click);   //添加鼠标相应函数

 

            t.ChartAreas["Default"].AxisX.Title = "年月";

            t.ChartAreas["Default"].AxisY.Title = find_zd[i];

          

            CommandCollection commands = t.UI.Commands;

 

//显示toolbarCommand command = commands.FindCommand()寻找toolbar中的各个功能组件,比如PropertiesToggle3D等,并将其设为隐藏

            t.UI.Toolbar.Enabled = true;                  

Command command = commands.FindCommand(ChartCommandType.Properties);

            command.Visible = false;

            command = commands.FindCommand(ChartCommandType.Toggle3D);

            command.Visible = false;

            command = commands.FindCommand(ChartCommandType.ToggleLegend);

            command.Visible = false;

            command = commands.FindCommand(ChartCommandType.PrintPreview);

            command.Visible = false;

            command = commands.FindCommand(ChartCommandType.Print);

            command.Visible = false;

            command = commands.FindCommand(ChartCommandType.Copy);

           

           

            // Dock toolbar on top

            t.UI.Toolbar.Docking = ToolbarDocking.Top;

 

            // Place toolbar outside of the chart

            t.UI.Toolbar.Placement = ToolbarPlacement.InsideChart;

            t.UI.Toolbar.BorderSkin.SkinStyle = BorderSkinStyle.Emboss;

            t.UI.Toolbar.BorderWidth = 0;

            //t.Legends.Clear();

            t.ImageType = ChartImageType.Png;

            t.BorderStyle = ChartDashStyle.Solid;

            t.BorderColor = Color.Black;

            t.BorderWidth = 2;

            t.BorderSkin.SkinStyle = BorderSkinStyle.Emboss;

            

            t.Width = 800;

            t.Height = 400;

 

///

           

            HtmlInputHidden hid = new HtmlInputHidden();

            hid.ID = "ChartHid" + i;

            tc1.Controls.Add(t);

            tr.Cells.Add(tc1);

            Table1.Rows.Add(tr);

            form1.Controls.Add(hid);

 

           

            count++;

 

        }

 

        for (int i = 0; i < count; i++)

        {

            HtmlInputHidden hidvalue = (System.Web.UI.HtmlControls.HtmlInputHidden)form1.FindControl("ChartHid" + i);

            hidvalue.Value = XV[i, 0, xMIN[i]] + "," + XV[i, 0, xMAX[i]] + "," + min[i] + "," + max[i] + "," + mon[i] + "," + FontNameList.SelectedIndex + "," + FontSizeList.SelectedIndex;

            chartdraw(i );

        }

        NUM = -1;

        IsDynamicLoadControl = true;

     

    }

 

   

 

    public bool IsDynamicLoadControl

    {

        get

        {

            object dynamic = ViewState["IsDynamicLoadControl"];

            return dynamic == null ? false : true;

        }

        set

        {

            ViewState["IsDynamicLoadControl"] = value;

        }

    }

    protected override void LoadViewState(object savedState)

    {

        base.LoadViewState(savedState);

 

        if (IsDynamicLoadControl)

        {

            AddChart();

        }

      

    }

 

   

    设置操作/

    protected void Xaxis_Click(object sender, EventArgs e)

    {

 

 

        string strRight = this.hidValue.Value;

        string[] arrRight = strRight.Split(new Char[] { 't' });

        if (arrRight.LongLength >= 2)

        {

            for (int i = 0; i < arrRight.Length; i++)

            {

                if (arrRight[i] != "" && arrRight[0] == "Char")

                {

                    NUM = int.Parse(arrRight[1]);

 

                }

            }

        }

 

 

        ///X间隔设置/

        mon[NUM] = int.Parse(Textmon.Text.ToString());

 

        ///Y轴设置//

        min[NUM] = double.Parse(this.Textmin.Text.ToString());

        max[NUM] = double.Parse(this.Textmax.Text.ToString());

 

        ///X轴设置/

        string xmin, xmax;

        xmin = textxmin.Text.ToString();

        xmax = textxmax.Text.ToString();

 

        for (int i = 0; i < pointmax; i++)

        {

            if (textxmin != null)

            {

                if (XV[NUM, 0, i] == xmin) xMIN[NUM] = i;

            }

            if (textxmax != null)

            {

                if (XV[NUM, 0, i] == xmax) xMAX[NUM] = i;

            }

        }

 

       

        ZTstr[NUM] = FontNameList.SelectedValue.ToString();

        Zdx[NUM] = int.Parse(FontSizeList.SelectedValue.ToString());

        int X = FontSizeList.SelectedIndex;

        HtmlInputHidden hidvalue = (System.Web.UI.HtmlControls.HtmlInputHidden)form1.FindControl("ChartHid" + NUM);

        hidvalue.Value = XV[NUM, 0, xMIN[NUM]] + "," + XV[NUM, 0, xMAX[NUM]] + "," + min[NUM] + "," + max[NUM] + "," + mon[NUM] + "," + FontNameList.SelectedIndex + "," + FontSizeList.SelectedIndex;

        chartdraw(NUM);

       

    }

   

 

 

 

    /// <summary>

    ///  转换SQL查询结果为DataSet

    /// </summary>

    /// <returns></returns>

    private DataSet GetData(string sql_str)

    {

 

        OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

 

        OracleCommand cmd = new OracleCommand();

 

        cmd.Connection = conn;

        // String strSql = sql + (int_CurrentPage * int_PageSize - int_PageSize + 1) + " and " + (int_CurrentPage * int_PageSize);

        cmd.CommandText = sql_str;

        cmd.CommandType = CommandType.Text;

 

        // 创建数据集

        DataSet ds = new DataSet();

        try

        {

            conn.Open();

 

            // 创建适配器

            OracleDataAdapter ad = new OracleDataAdapter();

 

            // 适配器命令

            ad.SelectCommand = cmd;

 

 

            // 填充到数据集(DataSet)

 

            ad.Fill(ds);

 

        }

        catch (Exception ex)

        {

            Response.Write("数据库错误,错误原因:" + ex.Message);

            Response.End();

        }

        finally

        {

            // 释放占有资源

            conn.Close();

        }

 

        return ds;

 

    }

 

 

    

    protected void Button2_Click(object sender, ImageClickEventArgs e)

    {

        sqlCX = selectunit.SelectedValue.ToString().Trim();

        string strdy = selectunit.SelectedValue.ToString().Trim();

        strdy = "'" + strdy + "'";

 

        string sqlzbname = sqlzb;

        sqlzbname = sqlzbname.Substring(0, sqlzbname.Length - 1);

        string sql_search;

        sqlzbname = sqlzbname.Replace("'", "");

        string[] find_zb = sqlzbname.Split(',');

        string str;

        seriesnum = 1;

        string[] chart_s = new string[100];

        string str_ny = "";

        if (Session["model_jdcx" + Server.MapPath("./").ToString()].ToString().Trim() == "month")

        {

            int add_time = Convert.ToInt32(tbxmin.Trim());

            while (add_time < Convert.ToInt32(Session["endtime_jdcx" + Server.MapPath("./").ToString()].ToString().Trim()) + 1)

            {

                chart_s[0] = chart_s[0] + Convert.ToString(add_time) + " /t ";

                str_ny += Convert.ToString(add_time) + ",";

                if ((Convert.ToString(add_time).Substring(4, 2)) == "12")

                    add_time = add_time + 100 - 11;

                else

                    add_time++;

            }

 

        }

        if (Session["model_jdcx" + Server.MapPath("./").ToString()].ToString().Trim() == "quarter")

        {

            int add_time = Convert.ToInt32(tbxmin.Trim());

            while (add_time < Convert.ToInt32(Session["endtime_jdcx" + Server.MapPath("./").ToString()].ToString().Trim()) - Convert.ToInt32(Session["endtime_jdcx" + Server.MapPath("./").ToString()].ToString().Trim().Substring(4, 2)) % 3 + 1)

            {

                chart_s[0] = chart_s[0] + Convert.ToString(add_time) + " /t ";

                str_ny += Convert.ToString(add_time) + ",";

                if ((Convert.ToString(add_time).Substring(4, 2)) == "12")

                    add_time = add_time + 100 - 9;

                else

                    add_time = add_time + 3;

            }

        }

        if (Session["model_jdcx" + Server.MapPath("./").ToString()].ToString().Trim() == "half")

        {

            int add_time = Convert.ToInt32(tbxmin.Trim());

            while (add_time < Convert.ToInt32(Session["endtime_jdcx" + Server.MapPath("./").ToString()].ToString().Trim()) - Convert.ToInt32(Session["endtime_jdcx" + Server.MapPath("./").ToString()].ToString().Trim().Substring(4, 2)) % 6 + 1)

            {

                chart_s[0] = chart_s[0] + Convert.ToString(add_time) + " /t ";

                str_ny += Convert.ToString(add_time) + ",";

                if ((Convert.ToString(add_time).Substring(4, 2)) == "12")

                    add_time = add_time + 100 - 6;

                else

                    add_time = add_time + 6;

            }

        }

        if (Session["model_jdcx" + Server.MapPath("./").ToString()].ToString().Trim() == "year")

        {

            int add_time = Convert.ToInt32(tbxmin.Trim());

            while (add_time < Convert.ToInt32(Session["endtime_jdcx" + Server.MapPath("./").ToString()].ToString().Trim()) - Convert.ToInt32(Session["endtime_jdcx" + Server.MapPath("./").ToString()].ToString().Trim().Substring(4, 2)) % 12 + 1)

            {

                chart_s[0] = chart_s[0] + Convert.ToString(add_time) + " /t ";

                str_ny += Convert.ToString(add_time) + ",";

                if ((Convert.ToString(add_time).Substring(4, 2)) == "12")

                    add_time = add_time + 100;

                else

                    add_time = add_time + 12;

            }

        }

        str_ny = str_ny.Substring(0, str_ny.Length - 1);

        string[] find_ny = str_ny.Split(',');

 

 

        for (int i = 0; i < chartnum; i++)

        {

            max[i] = 0;

            min[i] = 999999;

        }   

        int find_index = 0;

        int find = 0;

        DataSet ds = new DataSet();

 

        sql_search = "select ny," + sqlzbname + " from  dbb01view t  where  dydm = " + strdy + " and NY>='" + tbxmin + "'" + Session["oil_field_search_jdcx" + Server.MapPath("./").ToString()].ToString() + "  NY<='" + Session["endtime_jdcx" + Server.MapPath("./").ToString()].ToString() + "' and lbdm='" + Session["modelselect_jdcx" + Server.MapPath("./").ToString()].ToString() + "'  order by dydm,ny asc";

      

        ds = GetData(sql_search);

        if (ds.Tables[0].Rows.Count != 0)

        {

 

 

 

            for (int i = 0; i < chartnum; i++)

            {

                find = 0;

                find_index = 0;

                foreach (DataRow xx in ds.Tables[0].Rows)

                {

 

                    for (int ii = find_index; ii < find_ny.Length; ii++)

                    {

                        if (find_ny[ii] == xx["ny"].ToString().Trim())

                        {

                            XV[i, 0, find_index] = find_ny[ii];

                            str = "";

                            str = "" + find_zb[i] + "";

                            Regex r = new Regex(@"^[+-]?/d*(,/d{3})*(/./d+)?$");

                            if (xx[str].ToString() != "" && r.IsMatch(xx[str].ToString()))

                            {

                                YV[i, 0, find_index] = double.Parse(xx[str].ToString());

                            }

                            else YV[i, 0, find_index] = 0;

 

                            if (max[i] < YV[i, 0, find_index]) max[i] = YV[i, 0, find_index];

                            if (min[i] > YV[i, 0, find_index]) min[i] = YV[i, 0, find_index];

                            find++;

                            find_index++;

                            break;

                        }

                        else

                        {

 

                            XV[i, 0, find_index] = find_ny[find_index];

                            YV[i, 0, find_index] = 0;

                            if (max[i] < YV[i, 0, find_index]) max[i] = YV[i, 0, find_index];

                            if (min[i] > YV[i, 0, find_index]) min[i] = YV[i, 0, find_index];

                            find_index++;

                        }

 

                    }

 

                }

                if (find_index < find_ny.Length)

                {

                    for (int ii = find_index; ii < find_ny.Length; ii++)

                    {

                        XV[i, 0, ii] = find_ny[ii];

                        YV[i, 0, ii] = 0;

                        if (max[i] < YV[i, 0, ii]) max[i] = YV[i, 0, ii];

                        if (min[i] > YV[i, 0, ii]) min[i] = YV[i, 0, ii];

 

                    }

                }

 

            }

 

        }

        else

        {

            for (int i = 0; i < chartnum; i++)

            {

                for (int ii = 0; ii < find_ny.Length; ii++)

                {

                    XV[i, 0, ii] = find_ny[ii];

                    YV[i, 0, ii] = 0;

                    if (max[i] < YV[i, 0, find_index]) max[i] = YV[i, 0, find_index];

                    if (min[i] > YV[i, 0, find_index]) min[i] = YV[i, 0, find_index];

                    find_index++;

                }

            }

        }

 

        for (int i = 0; i < chartnum; i++)

        {

            if (max[i] != min[i])

            {

                max[i] = max[i] + (max[i] - min[i]) / 5;

                min[i] = min[i] - (max[i] - min[i]) / 5;

            }

            else

            {

                max[i] = max[i] + 10;

                min[i] = min[i] - 10;

            }

        }

        pointmax = (int)(find_ny.Length);

        

        for (int i = 0; i < chartnum; i++)

        {

            if (tbymax != "") max[i] = double.Parse(tbymax);

            if (tbymin != "") min[i] = double.Parse(tbymin);

            mon[i] = int.Parse(tbxmax); ;

            xMIN[i] = 0;

            xMAX[i] = pointmax - 1;

            ZTstr[i] = "Times New Roman";   //字体

            Zdx[i] = 8;    //字大小

            HtmlInputHidden hidvalue = (System.Web.UI.HtmlControls.HtmlInputHidden)form1.FindControl("ChartHid" + i);

            hidvalue.Value = XV[i, 0, xMIN[i]] + "," + XV[i, 0, xMAX[i]] + "," + min[i] + "," + max[i] + "," + mon[i] + "," + 0 + "," + 2;

       

        }

        for (int i = 0; i < chartnum; i++)

        {

            chartdraw(i);

        }

    }

}

 

(1)         通过AddChart()实现动态添加Chart,最后添加到Table1

(2)         Chartdraw()实现绘图

(3)   问题:如何在右键弹出菜单中显示当前图中的各个属性值。一定要在客户端的右键响应函数中mouse()将各属性值添加到各个textbox中。在这里用到了隐藏input,在动态添加图时动态添加HtmlInputHidden hid = new HtmlInputHidden();并将各属性值填入其中,在mouse()函数中将其取出,填入各textbox

(4)   div层被覆盖的问题,可通过设置style中的z-index来解决

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值