在实现绘图功能时找到了Dundas这个控件,用了一下感觉还不错。以下是利用该控件实现的绘图功能代码,由于刚用这个控件没多久,所以很多功能的实现可能走了很多弯路,以下代码仅作参考。
功能:实现动态绘图,通过鼠标点击改变点的纵坐标,右键弹出菜单实现对以下属性的设置:(1)X轴坐标最大值最小值;(2)Y轴坐标最大值最小值;(3)X轴字体及大小;(4)X轴显示数据的步长,即每几个点显示一次。
一,程序代码
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>
</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>
</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>
</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;
//显示toolbar,Command command = commands.FindCommand()寻找toolbar中的各个功能组件,比如Properties,Toggle3D等,并将其设为隐藏
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来解决