using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using WeifenLuo.WinFormsUI.Docking; using ty.Model; using ty.BLL; using DevExpress.XtraLayout; using DevExpress.XtraEditors; using DevExpress.XtraEditors.Controls; using DevExpress.XtraEditors.Repository; using DevExpress.XtraGrid; using DevExpress.XtraGrid.Columns; using DevExpress.XtraGrid.Views.Grid; using DevExpress.XtraGrid.Views.Card; using System.Xml; using Dundas.Charting.WinControl; using System.Threading; namespace TransmissionLine { //定义一个委托 public delegate void DataChange1(); public struct DecimalRange1 { public DecimalRange1(decimal maxValue, decimal minValue) { this.MaxValue1 = Math.Max(maxValue, minValue); this.MinValue1 = Math.Min(maxValue, minValue); } public decimal MaxValue1; public decimal MinValue1; } /// <summary> /// 4个表共同的委托历史数据方法 /// </summary> public delegate void SelectHistoryData();//定义委托 public partial class SMidHistoricalDataCT : dpDummyDoc { DataTable dt; //定一个DataTable对象 //int a = 0; //定义一个父窗体对象 dpMain dpmain; int id = 1; //xml 文档的编号 /// <summary> /// 线路历史数据表 /// </summary> public static bool result1 = false; /// <summary> /// 下拉框移出节点的判断 /// </summary> public static bool removeCB1 = false; int a = 0; /// <summary> /// 4个表共同的委托历史数据方法,当是执行事件不同 /// </summary> public event SelectHistoryData selecthistorydatas; //定义委托事件 //定义静态变量 private DateTime strCOLLECTTIME;//采集时间 private string strLINENAME; //线路名 DateTime startDate = DateTime.Now;//获得系统当前时间 //string xmlnameCount = "";//xml name /// <summary> /// 构造函数 /// </summary> public SMidHistoricalDataCT(dpMain dpmain) { this.dpmain = dpmain; //dt = new DataTable(); // 在构造函数里实例化 InitializeComponent(); } public void SMidHistoricalDataCT_Load(object sender, EventArgs e) {//页面加载 PublicClass.PassMethod.setskip = 1; if (SelObjChoice.pageHeadtext != "" && PublicClass.PassMethod.historyTree == 1) { this.TabText = SelObjChoice.pageHeadtext;//页面头部显示 //this.chart1.Titles[0].Text = SelObjChoice.pageHeadtext + "曲线图";//标题设置 } else { this.TabText = LeftHistoricaldata.LeftpageHeadtext; //this.chart1.Titles[0].Text = LeftHistoricaldata.LeftpageHeadtext + "曲线图";//标题设置 } // PublicClass.cbXmlClass.InsertXml(this.Text);//插入xml文档 gridView1.GroupPanelText = "拖动列到此处进行分类"; //头部显示文字 gridView1.OptionsBehavior.Editable = false; //只读不拷贝 //BindGridView(this, EventArgs.Empty);//绑定查询方法 //result1 = true;//页面加载返回真 //注册事件 this.gridControl1.EmbeddedNavigator.ButtonClick += new NavigatorButtonClickEventHandler(EmbeddedNavigator_ButtonClick); } void EmbeddedNavigator_ButtonClick(object sender, NavigatorButtonClickEventArgs e) { if (Login.Userrole == "普通用户") { MessageBox.Show("你没有权限,请联系管理员"); } else { switch (e.Button.ButtonType) { case NavigatorButtonType.Custom: if (e.Button.Hint == "删除") { //声明一个返回值 DialogResult ReturnDlg = MessageBox.Show(this, "是否要删除该记录?", "信息提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (ReturnDlg == DialogResult.Yes) {//等于是的时候 try { CAPACITY_HISTORY model = new CAPACITY_HISTORY(); model.COLLECTTIME = strCOLLECTTIME;//设备名 model.LINENAME = strLINENAME; int message = new CAPACITY_HISTORYBLL().Del(model); if (message == 0) MessageBox.Show("删除失败!"); else { MessageBox.Show("删除成功!"); dpmain.BindGridViewCAPACITY_HISTORY();//重新刷新数据 } } catch { MessageBox.Show("该记录不能被删除"); } } } break; } } } private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e) { try {//没有行的时候产生异常不处理 int selectedHandle = this.gridView1.GetSelectedRows()[0]; strCOLLECTTIME =Convert.ToDateTime(this.gridView1.GetRowCellValue(selectedHandle, "COLLECTTIME").ToString());//获得选中的行 strLINENAME = this.gridView1.GetRowCellValue(selectedHandle, "LINENAME").ToString(); } catch { } } private void SMidHistoricalDataCT_FormClosed(object sender, FormClosedEventArgs e) {//页面关闭后发生 result1 = false; removeCB1 = true;//关闭一个页面返回为真 //dpMain.lists1.Remove(); for (int i = 0; i < PublicClass.PassMethod.lists.Count; i++) { if (this.TabText == PublicClass.PassMethod.lists[i].TabText) { PublicClass.PassMethod.lists.RemoveAt(i);//移除combox值 break; } } dpmain.refreshList();//刷新列表 } private void SMidHistoricalDataCT_Activated(object sender, EventArgs e) {//每当页面激活时 dpmain.SMidhdct = this;//打开页面还是当前页 PublicClass.PassMethod.historyChoice = "线路容量历史数据"; PublicClass.PassMethod.setskip = 1; dpmain.showRightPage(this.TabText);//右边页面显示 } /// <summary> /// 多线程执行的方法 /// </summary> public void BindingSourceListChanged() { Control.CheckForIllegalCrossThreadCalls = false;//控件产生的异常不做处理 this.chart1.SuspendLayout(); this.updateChartSeriesBackgroundWorker.RunWorkerAsync(this.toolStripProgressBar1); timer1.Start();//心跳开启 //if (this.updateChartSeriesBackgroundWorker.IsBusy) //{ // this.updateChartSeriesBackgroundWorker.CancelAsync(); //} //else //{ //this.chart1.SuspendLayout(); //this.updateChartSeriesBackgroundWorker.RunWorkerAsync(); //} } private void updateChartSeriesBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) {//调用委托 //this.Invoke(new DataChange1(DataSourceChange)); this.toolStripStatusLabel1.Text = "Loading ... " + "Thanks for your patience"; string strsql = null; dt = null; if (SelObjChoice.treevalueline != "") { strsql = " where LINENAME = '" + SelObjChoice.treevalueline + "' and TO_CHAR(COLLECTTIME,'YYYY-MM-DD HH24:MI:SS') between '" + RightChoice.historystartTime + "' and '" + RightChoice.historyendTime + "' ORDER BY COLLECTTIME ASC"; } else { strsql = " where LINENAME = '" + LeftHistoricaldata.Parenttreevalueline + "' and TO_CHAR(COLLECTTIME,'YYYY-MM-DD HH24:MI:SS') between '" + RightChoice.historystartTime + "' and '" + RightChoice.historyendTime + "' ORDER BY COLLECTTIME ASC"; } try { dt = new CAPACITY_HISTORYBLL().SelectCAPACITY_HISTORY(strsql); } catch { MessageBox.Show("操作有误!请缩短查询范围"); } e.Result = dt; toolStripStatusLabel1.Text = "Please, wait ..."; } /// <summary> /// 线路历史记录查询 /// </summary> public void DataSourceChange() { string LegendText; Color color; DecimalRange1 rang; //string strsql = null; //线路负荷 string maxpricefh = "";//最大值 string minpricefh = "";//最小值 //string colorNamefh = "";//颜色名 //线路平均温度 string maxpriceat = "";//最大值 string minpriceat = "";//最小值 //string colorNameat = "";//颜色名 //线路计算容量 string maxpricerl = "";//最大值 string minpricerl = "";//最小值 //string colorNamerl = "";//颜色名 this.chart1.Legends["Default"].CustomItems.Clear(); this.chart1.Series.Clear(); this.chart1.ChartAreas["Default"].AxisX.View.ZoomReset(100); //if (SelObjChoice.treevalueline != "") //{ // strsql = " where LINENAME = '" + SelObjChoice.treevalueline + "' and TO_CHAR(COLLECTTIME,'YYYY-MM-DD HH24:MI:SS') between '" + RightChoice.historystartTime + "' and '" + RightChoice.historyendTime + "' ORDER BY COLLECTTIME ASC"; //} //else //{ // strsql = " where LINENAME = '" + LeftHistoricaldata.Parenttreevalueline + "' and TO_CHAR(COLLECTTIME,'YYYY-MM-DD HH24:MI:SS') between '" + RightChoice.historystartTime + "' and '" + RightChoice.historyendTime + "' ORDER BY COLLECTTIME ASC"; //} DataTable dt = new CAPACITY_HISTORYBLL().SelectCAPACITY_HISTORY(strsql); //dt = new CAPACITY_HISTORYBLL().SelectCAPACITY_HISTORY(strsql); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(Application.StartupPath + "//historyDataFixedValue.xml"); XmlNode root = xmlDoc.SelectSingleNode("fathernode"); XmlNode root1 = root.SelectSingleNode("线路容量历史数据"); XmlNodeList nodelist = root1.ChildNodes; foreach (XmlNode xn in nodelist) { XmlElement xe = (XmlElement)(xn);//节点强制转化 XmlNodeList nodelist1 = xe.ChildNodes;//继续向下节点查 switch (xe.GetAttribute("name")) { case "线路负荷": foreach (XmlNode xn1 in nodelist1) { XmlElement xe1 = (XmlElement)(xn1); switch (xe1.Name) { case "maxvalue": maxpricefh = xe1.InnerText;//节点赋值 break; case "minvalue": minpricefh = xe1.InnerText; break; //case "color": // colorNamefh = xe1.InnerText; // break; } } break; case "线路平均温度": foreach (XmlNode xn1 in nodelist1) { XmlElement xe1 = (XmlElement)(xn1); switch (xe1.Name) { case "maxvalue": maxpriceat = xe1.InnerText;//节点赋值 break; case "minvalue": minpriceat = xe1.InnerText; break; //case "color": // colorNameat = xe1.InnerText; // break; } } break; case "线路计算容量": foreach (XmlNode xn1 in nodelist1) { XmlElement xe1 = (XmlElement)(xn1); switch (xe1.Name) { case "maxvalue": maxpricerl = xe1.InnerText;//节点赋值 break; case "minvalue": minpricerl = xe1.InnerText; break; //case "color": // colorNamerl = xe1.InnerText; // break; } } break; } } if (RightChoice.slineload==true) { rang = new DecimalRange1(Convert.ToDecimal(maxpricefh), Convert.ToDecimal(minpricefh)); color = Color.Yellow; LegendText = "线路负荷(A)/n范围:" + rang.MinValue1 + "到" + rang.MaxValue1; AddSeries(LegendText, color, 2, dt.Rows, rang);//中间数字2代表数据库的列第3列下标从零开始 } if (RightChoice.sLINETEMPERATURE==true) { DecimalRange1 rang2 = new DecimalRange1(Convert.ToDecimal(maxpriceat), Convert.ToDecimal(minpriceat)); color = Color.Red; LegendText = "线路平均温度(摄氏度)/n范围:" + rang2.MinValue1 + "到" + rang2.MaxValue1; AddSeries(LegendText, color, 3, dt.Rows, rang2); } if (RightChoice.sLINECAPACITY == true) { DecimalRange1 rang3 = new DecimalRange1(Convert.ToDecimal(maxpricerl), Convert.ToDecimal(minpricerl)); color = Color.Green; LegendText = "线路计算容量(A)/n范围:" + rang3.MinValue1 + "到" + rang3.MaxValue1; AddSeries(LegendText, color, 4, dt.Rows, rang3); } } private void AddSeries(string LegendText, Color color, int col, DataRowCollection Rows, DecimalRange1 rang) { Series series = new Series(); series.Type = SeriesChartType.FastLine; series.ShowInLegend = true; series.LegendText = series.ToolTip = LegendText; series.Color = color; series.XValueType = ChartValueTypes.DateTime; for (int i = 0; i < Rows.Count; i++) { DataPoint pt = new DataPoint(); double currentValue = Convert.ToDouble(Rows[i][col]); if (currentValue < Convert.ToDouble(rang.MinValue1)) currentValue = Convert.ToDouble(rang.MinValue1); if (currentValue > Convert.ToDouble(rang.MaxValue1)) currentValue = Convert.ToDouble(rang.MaxValue1); DateTime tim = (DateTime)Rows[i][0]; pt.SetValueXY(tim, (currentValue - Convert.ToDouble(rang.MinValue1)) / Convert.ToDouble(rang.MaxValue1 - rang.MinValue1) * 100); pt.ToolTip = "日期:" + tim.ToLongDateString() + "/n时间:" + tim.ToLongTimeString() + "/n" + series.LegendText + "/n值" + currentValue.ToString(); series.Points.Add(pt); } this.chart1.Series.Add(series); } private void 放大ToolStripMenuItem_Click(object sender, EventArgs e) { double min = this.chart1.ChartAreas[0].AxisX.View.GetViewMinimum(); double max = this.chart1.ChartAreas[0].AxisX.View.GetViewMaximum(); this.chart1.ChartAreas[0].AxisX.View.Zoom(min, (max + min) / 2); a++; } private void 缩小ToolStripMenuItem_Click(object sender, EventArgs e) { this.chart1.ChartAreas[0].AxisX.View.ZoomReset(1); if (a > 0) a--; } private void 还原ToolStripMenuItem_Click(object sender, EventArgs e) { this.chart1.ChartAreas[0].AxisX.View.ZoomReset(100); } private void updateChartSeriesBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { //if (e.Cancelled) //{ // this.updateChartSeriesBackgroundWorker.RunWorkerAsync(); //} //else if (e.Error != null) //{ // MessageBox.Show(e.Error.Message); //} //else //{ // this.chart1.ResumeLayout(true); // this.chart1.Invalidate(true); // this.chart1.Titles["State"].Text = "更新完毕/n" + DateTime.Now.ToLongTimeString(); //} toolStripProgressBar1.Value = 100; //dataGridView1.DataSource = e.Result; DataSourceChange(); toolStripStatusLabel1.Text = ""; toolStripProgressBar1.Value = 0; timer1.Stop(); toolStripStatusLabel2.Text = ""; this.chart1.ResumeLayout(true); this.chart1.Invalidate(true); this.chart1.Titles["State"].Text = "更新完毕/n" + DateTime.Now.ToLongTimeString(); RightChoice.isQuering = false; MessageBox.Show("查询结束!!!!", "友情提示"); //this.statusStrip1.Visible = false; } private void 设置ToolStripMenuItem_Click(object sender, EventArgs e) {//设置参数 SetFixedValue sfv = new SetFixedValue(); sfv.ShowDialog(); } private void timer1_Tick(object sender, EventArgs e) {//计算时间设置 启动时间格式00:00:000 TimeSpan ts = DateTime.Now.Subtract(startDate); string sTime = " ..." + ts.Minutes.ToString("00") + ":" + ts.Seconds.ToString("00") + ":" + ts.Milliseconds.ToString("000"); toolStripStatusLabel2.Text = sTime; if (toolStripProgressBar1.Value == toolStripProgressBar1.Maximum) { toolStripProgressBar1.Value = 0; } toolStripProgressBar1.PerformStep(); } } }