From 8c0434431e2c77de997ffbf27e65fdcc7ab915e3 Mon Sep 17 00:00:00 2001
From: ningshuxia <ningshuxia0927@outlook.com>
Date: 星期五, 24 二月 2023 13:22:35 +0800
Subject: [PATCH] 曲线比较 临时

---
 WinFormUI/IStation.WinFormUI.MonitorDataSet/XtraForm1.cs                                                     |   26 
 WinFormUI/IStation.WinFormUI.MonitorDataSet/曲线比较/CurveCompareChartMgr.cs                                     |  178 +++
 WinFormDesktop/IStation.WinFormDesktop.Scatl.Professional/MainForm.designer.cs                               |   12 
 WinFormUI/IStation.WinFormUI.MonitorDataSet/曲线比较/CurveCompareChartMgr.Designer.cs                            |  934 ++++++++++++++++++++
 WinFormUI/IStation.WinFormUI.MonitorDataSet/IStation.WinFormUI.MonitorDataSet.csproj                         |   62 +
 WinFormUI/IStation.WinFormUI.MonitorDataSet/曲线比较/CurveCompareMultiSelectMonitorPointTreeListCtrl.designer.cs |  327 +++++++
 WinFormUI/IStation.WinFormUI.Common/IStation.WinFormUI.Common.csproj                                         |    6 
 WinFormUI/IStation.WinFormUI.Common/Properties/Resource.Designer.cs                                          |   20 
 WinFormUI/IStation.WinFormUI.MonitorDataSet/XtraForm1.resx                                                   |  120 ++
 WinFormUI/IStation.WinFormUI.MonitorDataSet/曲线比较/CurveCompareMultiSelectMonitorPointTreeListCtrl.resx        |  234 +++++
 WinFormUI/IStation.WinFormUI.MonitorDataSet/曲线比较/CurveCompareChartMgr.resx                                   |  242 +++++
 Model/IStation.Model.Logic/logic_tree/LogicTree.cs                                                           |    6 
 WinFormUI/IStation.WinFormUI.Common/Properties/Resource.resx                                                 |    6 
 WinFormDesktop/IStation.WinFormDesktop.Scatl.Professional/MainForm.cs                                        |    9 
 WinFormUI/IStation.WinFormUI.MonitorDataSet/曲线比较/UnitValueHelper.cs                                          |   38 
 WinFormUI/IStation.WinFormUI.Common/Resources/MonitorPoint.png                                               |    0 
 WinFormUI/IStation.WinFormUI.Common/Resources/Group.png                                                      |    0 
 BLL/IStation.BLL.Monitor/monitor_point/monitor_point_group/MonitorPointGroup.cs                              |   10 
 WinFormUI/IStation.WinFormUI.MonitorDataSet/XtraForm1.Designer.cs                                            |  128 ++
 WinFormUI/IStation.WinFormUI.MonitorDataSet/曲线比较/CurveCompareMultiSelectMonitorPointTreeListCtrl.cs          |  290 ++++++
 20 files changed, 2,641 insertions(+), 7 deletions(-)

diff --git a/BLL/IStation.BLL.Monitor/monitor_point/monitor_point_group/MonitorPointGroup.cs b/BLL/IStation.BLL.Monitor/monitor_point/monitor_point_group/MonitorPointGroup.cs
index bb40ec2..74bec46 100644
--- a/BLL/IStation.BLL.Monitor/monitor_point/monitor_point_group/MonitorPointGroup.cs
+++ b/BLL/IStation.BLL.Monitor/monitor_point/monitor_point_group/MonitorPointGroup.cs
@@ -102,6 +102,16 @@
             var all = QueryAll(projectId);
             return all.Where(x => Ids.Contains(x.Id)).ToList();
         }
+
+
+        /// <summary>
+        /// 鏍规嵁 BelongType BelongId 鏌ヨ
+        /// </summary>
+        public List<Model.MonitorPointGroup> QueryByBelongTypeAndBelongId(long projectId, string belongType, long belongId)
+        {
+            var all = QueryAll(projectId);
+            return all.Where(x => x.BelongType == belongType && x.BelongId == belongId).ToList();
+        }
         #endregion
 
         #region Insert
diff --git a/Model/IStation.Model.Logic/logic_tree/LogicTree.cs b/Model/IStation.Model.Logic/logic_tree/LogicTree.cs
index 6dd5fdb..3d8aca3 100644
--- a/Model/IStation.Model.Logic/logic_tree/LogicTree.cs
+++ b/Model/IStation.Model.Logic/logic_tree/LogicTree.cs
@@ -19,7 +19,7 @@
             this.CatalogId = rhs.CatalogId;
             this.ParentIds = rhs.ParentIds;
             this.LogicType = rhs.LogicType;
-            this.LogicID = rhs.LogicID;
+            this.LogicId = rhs.LogicId;
             this.SortCode = rhs.SortCode;
         } 
 
@@ -29,7 +29,7 @@
             this.CatalogId = rhs.CatalogId;
             this.ParentIds = rhs.ParentIds;
             this.LogicType = rhs.LogicType;
-            this.LogicID = rhs.LogicID;
+            this.LogicId = rhs.LogicId;
             this.SortCode = rhs.SortCode;
         }
 
@@ -56,7 +56,7 @@
         /// <summary>
         /// 涓氬姟鏍囪瘑
         /// </summary>	
-        public long LogicID { get; set; }
+        public long LogicId { get; set; }
 
         /// <summary>
         /// 鎺掑簭鐮�
diff --git a/WinFormDesktop/IStation.WinFormDesktop.Scatl.Professional/MainForm.cs b/WinFormDesktop/IStation.WinFormDesktop.Scatl.Professional/MainForm.cs
index 2e4a1f7..1d21ecd 100644
--- a/WinFormDesktop/IStation.WinFormDesktop.Scatl.Professional/MainForm.cs
+++ b/WinFormDesktop/IStation.WinFormDesktop.Scatl.Professional/MainForm.cs
@@ -397,9 +397,7 @@
         #endregion
 
         private void accProjectItem_Click(object sender, EventArgs e)
-        {
-            //DataImportExportHelper.Import(GlobalParas.ProjectId);
-
+        { 
             var scene = SceneTempCreate.GetScene(GlobalParas.ProjectId);
             var bol= GeneralMonitorDataImportHelper.Import(GlobalParas.ProjectId,scene.Id,scene.DataSourcesMappers);
             if (!bol)
@@ -416,5 +414,10 @@
         {
             ProjectHelper.OtherSaveProject(GlobalParas.ProjectId);
         }
+
+        private void accordionControlElement2_Click(object sender, EventArgs e)
+        {
+
+        }
     }
 }
diff --git a/WinFormDesktop/IStation.WinFormDesktop.Scatl.Professional/MainForm.designer.cs b/WinFormDesktop/IStation.WinFormDesktop.Scatl.Professional/MainForm.designer.cs
index de2bf5d..f477ee0 100644
--- a/WinFormDesktop/IStation.WinFormDesktop.Scatl.Professional/MainForm.designer.cs
+++ b/WinFormDesktop/IStation.WinFormDesktop.Scatl.Professional/MainForm.designer.cs
@@ -49,6 +49,7 @@
             this.tabbedView1 = new DevExpress.XtraBars.Docking2010.Views.Tabbed.TabbedView(this.components);
             this.behaviorManager1 = new DevExpress.Utils.Behaviors.BehaviorManager(this.components);
             this.accordionControlElement1 = new DevExpress.XtraBars.Navigation.AccordionControlElement();
+            this.accordionControlElement2 = new DevExpress.XtraBars.Navigation.AccordionControlElement();
             ((System.ComponentModel.ISupportInitialize)(this.accordionControlModular)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.fluentDesignFormControl1)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.documentManager1)).BeginInit();
@@ -78,7 +79,8 @@
             // accModularGroup
             // 
             this.accModularGroup.Elements.AddRange(new DevExpress.XtraBars.Navigation.AccordionControlElement[] {
-            this.accProjectItem});
+            this.accProjectItem,
+            this.accordionControlElement2});
             this.accModularGroup.Expanded = true;
             this.accModularGroup.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("accModularGroup.ImageOptions.SvgImage")));
             this.accModularGroup.Name = "accModularGroup";
@@ -243,6 +245,13 @@
             this.accordionControlElement1.Style = DevExpress.XtraBars.Navigation.ElementStyle.Item;
             this.accordionControlElement1.Text = "Element1";
             // 
+            // accordionControlElement2
+            // 
+            this.accordionControlElement2.Name = "accordionControlElement2";
+            this.accordionControlElement2.Style = DevExpress.XtraBars.Navigation.ElementStyle.Item;
+            this.accordionControlElement2.Text = "鏇茬嚎姣旇緝";
+            this.accordionControlElement2.Click += new System.EventHandler(this.accordionControlElement2_Click);
+            // 
             // MainForm
             // 
             this.Appearance.Options.UseFont = true;
@@ -297,5 +306,6 @@
         private DevExpress.XtraBars.BarButtonItem barBtnExportProject;
         private DevExpress.XtraBars.BarButtonItem barBtnEditProject;
         private DevExpress.XtraBars.BarStaticItem barStaticProjectCaption;
+        private DevExpress.XtraBars.Navigation.AccordionControlElement accordionControlElement2;
     }
 }
\ No newline at end of file
diff --git a/WinFormUI/IStation.WinFormUI.Common/IStation.WinFormUI.Common.csproj b/WinFormUI/IStation.WinFormUI.Common/IStation.WinFormUI.Common.csproj
index 5c87aa2..abddd43 100644
--- a/WinFormUI/IStation.WinFormUI.Common/IStation.WinFormUI.Common.csproj
+++ b/WinFormUI/IStation.WinFormUI.Common/IStation.WinFormUI.Common.csproj
@@ -85,5 +85,11 @@
   <ItemGroup>
     <None Include="Resources\app.ico" />
   </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\MonitorPoint.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\Group.png" />
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
 </Project>
\ No newline at end of file
diff --git a/WinFormUI/IStation.WinFormUI.Common/Properties/Resource.Designer.cs b/WinFormUI/IStation.WinFormUI.Common/Properties/Resource.Designer.cs
index c3af604..75ca1c6 100644
--- a/WinFormUI/IStation.WinFormUI.Common/Properties/Resource.Designer.cs
+++ b/WinFormUI/IStation.WinFormUI.Common/Properties/Resource.Designer.cs
@@ -69,5 +69,25 @@
                 return ((System.Drawing.Icon)(obj));
             }
         }
+        
+        /// <summary>
+        ///   鏌ユ壘 System.Drawing.Bitmap 绫诲瀷鐨勬湰鍦板寲璧勬簮銆�
+        /// </summary>
+        public static System.Drawing.Bitmap Group {
+            get {
+                object obj = ResourceManager.GetObject("Group", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   鏌ユ壘 System.Drawing.Bitmap 绫诲瀷鐨勬湰鍦板寲璧勬簮銆�
+        /// </summary>
+        public static System.Drawing.Bitmap MonitorPoint {
+            get {
+                object obj = ResourceManager.GetObject("MonitorPoint", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
     }
 }
diff --git a/WinFormUI/IStation.WinFormUI.Common/Properties/Resource.resx b/WinFormUI/IStation.WinFormUI.Common/Properties/Resource.resx
index e6e1c5d..4700f45 100644
--- a/WinFormUI/IStation.WinFormUI.Common/Properties/Resource.resx
+++ b/WinFormUI/IStation.WinFormUI.Common/Properties/Resource.resx
@@ -121,4 +121,10 @@
   <data name="app" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\app.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
+  <data name="Group" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Group.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="MonitorPoint" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\MonitorPoint.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/WinFormUI/IStation.WinFormUI.Common/Resources/Group.png b/WinFormUI/IStation.WinFormUI.Common/Resources/Group.png
new file mode 100644
index 0000000..c330181
--- /dev/null
+++ b/WinFormUI/IStation.WinFormUI.Common/Resources/Group.png
Binary files differ
diff --git a/WinFormUI/IStation.WinFormUI.Common/Resources/MonitorPoint.png b/WinFormUI/IStation.WinFormUI.Common/Resources/MonitorPoint.png
new file mode 100644
index 0000000..bfce672
--- /dev/null
+++ b/WinFormUI/IStation.WinFormUI.Common/Resources/MonitorPoint.png
Binary files differ
diff --git a/WinFormUI/IStation.WinFormUI.MonitorDataSet/IStation.WinFormUI.MonitorDataSet.csproj b/WinFormUI/IStation.WinFormUI.MonitorDataSet/IStation.WinFormUI.MonitorDataSet.csproj
index fbb640f..82e18a0 100644
--- a/WinFormUI/IStation.WinFormUI.MonitorDataSet/IStation.WinFormUI.MonitorDataSet.csproj
+++ b/WinFormUI/IStation.WinFormUI.MonitorDataSet/IStation.WinFormUI.MonitorDataSet.csproj
@@ -35,8 +35,11 @@
     <Reference Include="DevExpress.Data.v21.2, Version=21.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
     <Reference Include="DevExpress.Printing.v21.2.Core, Version=21.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
     <Reference Include="DevExpress.Utils.v21.2, Version=21.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
+    <Reference Include="DevExpress.XtraBars.v21.2, Version=21.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
+    <Reference Include="DevExpress.XtraCharts.v21.2, Version=21.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
     <Reference Include="DevExpress.XtraEditors.v21.2, Version=21.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
     <Reference Include="DevExpress.XtraLayout.v21.2, Version=21.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
+    <Reference Include="DevExpress.XtraTreeList.v21.2, Version=21.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
     <Reference Include="System" />
     <Reference Include="System.Core" />
     <Reference Include="System.Drawing" />
@@ -50,8 +53,31 @@
   </ItemGroup>
   <ItemGroup>
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="XtraForm1.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="XtraForm1.Designer.cs">
+      <DependentUpon>XtraForm1.cs</DependentUpon>
+    </Compile>
+    <Compile Include="鏇茬嚎姣旇緝\CurveCompareChartMgr.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="鏇茬嚎姣旇緝\CurveCompareChartMgr.Designer.cs">
+      <DependentUpon>CurveCompareChartMgr.cs</DependentUpon>
+    </Compile>
+    <Compile Include="鏇茬嚎姣旇緝\CurveCompareMultiSelectMonitorPointTreeListCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="鏇茬嚎姣旇緝\CurveCompareMultiSelectMonitorPointTreeListCtrl.designer.cs">
+      <DependentUpon>CurveCompareMultiSelectMonitorPointTreeListCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="鏇茬嚎姣旇緝\UnitValueHelper.cs" />
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\..\BLL\IStation.BLL.Logic\IStation.BLL.Logic.csproj">
+      <Project>{2ffb7243-78f6-460b-ade5-6e076e7e621b}</Project>
+      <Name>IStation.BLL.Logic</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\BLL\IStation.BLL.MonitorDataSet\IStation.BLL.MonitorDataSet.csproj">
       <Project>{786b0835-f603-4b64-baf0-e32b20aecca9}</Project>
       <Name>IStation.BLL.MonitorDataSet</Name>
@@ -59,6 +85,14 @@
     <ProjectReference Include="..\..\BLL\IStation.BLL.Monitor\IStation.BLL.Monitor.csproj">
       <Project>{5ea8926d-66c8-443a-a469-53db415b8172}</Project>
       <Name>IStation.BLL.Monitor</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\Core\IStation.Core\IStation.Core.csproj">
+      <Project>{455042a5-7c41-41de-9d55-1defc235ed28}</Project>
+      <Name>IStation.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\Model\IStation.Model.Logic\IStation.Model.Logic.csproj">
+      <Project>{6de55e0b-68ee-4a67-b1cb-9aeb3497a65e}</Project>
+      <Name>IStation.Model.Logic</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\Model\IStation.Model.MonitorDataSet\IStation.Model.MonitorDataSet.csproj">
       <Project>{e4d87139-f3a2-48c1-9415-90c4dc1d2031}</Project>
@@ -68,6 +102,34 @@
       <Project>{8e95d9eb-32db-4a69-8726-22dc92f9d563}</Project>
       <Name>IStation.Model.Monitor</Name>
     </ProjectReference>
+    <ProjectReference Include="..\..\Untity\IStation.Unit\IStation.Unit.csproj">
+      <Project>{205FA8C3-2FC2-40CC-A3E6-7D67BE855550}</Project>
+      <Name>IStation.Unit</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\Untity\IStation.Untity\IStation.Untity.csproj">
+      <Project>{7D4BC60E-B821-4A9B-BD10-A299E9D5162F}</Project>
+      <Name>IStation.Untity</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\IStation.WinFormUI.Common\IStation.WinFormUI.Common.csproj">
+      <Project>{c8bd84a0-3621-4fcc-b1f6-231343726a8f}</Project>
+      <Name>IStation.WinFormUI.Common</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\IStation.WinFormUI.Core\IStation.WinFormUI.Core.csproj">
+      <Project>{f7adb270-1803-44b1-87d0-3d6517c77f95}</Project>
+      <Name>IStation.WinFormUI.Core</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Properties\licenses.licx" />
+    <EmbeddedResource Include="XtraForm1.resx">
+      <DependentUpon>XtraForm1.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="鏇茬嚎姣旇緝\CurveCompareChartMgr.resx">
+      <DependentUpon>CurveCompareChartMgr.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="鏇茬嚎姣旇緝\CurveCompareMultiSelectMonitorPointTreeListCtrl.resx">
+      <DependentUpon>CurveCompareMultiSelectMonitorPointTreeListCtrl.cs</DependentUpon>
+    </EmbeddedResource>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
 </Project>
\ No newline at end of file
diff --git a/WinFormUI/IStation.WinFormUI.MonitorDataSet/XtraForm1.Designer.cs b/WinFormUI/IStation.WinFormUI.MonitorDataSet/XtraForm1.Designer.cs
new file mode 100644
index 0000000..c464d84
--- /dev/null
+++ b/WinFormUI/IStation.WinFormUI.MonitorDataSet/XtraForm1.Designer.cs
@@ -0,0 +1,128 @@
+锘縩amespace IStation.WinFormUI.MonitorDataSet
+{
+    partial class XtraForm1
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.treeList1 = new DevExpress.XtraTreeList.TreeList();
+            this.layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            this.simpleButton1 = new DevExpress.XtraEditors.SimpleButton();
+            this.Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            ((System.ComponentModel.ISupportInitialize)(this.treeList1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).BeginInit();
+            this.layoutControl1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.Root)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // treeList1
+            // 
+            this.treeList1.Location = new System.Drawing.Point(12, 38);
+            this.treeList1.Name = "treeList1";
+            this.treeList1.Size = new System.Drawing.Size(156, 70);
+            this.treeList1.TabIndex = 0;
+            // 
+            // layoutControl1
+            // 
+            this.layoutControl1.Controls.Add(this.treeList1);
+            this.layoutControl1.Controls.Add(this.simpleButton1);
+            this.layoutControl1.Location = new System.Drawing.Point(174, 97);
+            this.layoutControl1.Name = "layoutControl1";
+            this.layoutControl1.Root = this.Root;
+            this.layoutControl1.Size = new System.Drawing.Size(180, 120);
+            this.layoutControl1.TabIndex = 1;
+            this.layoutControl1.Text = "layoutControl1";
+            // 
+            // simpleButton1
+            // 
+            this.simpleButton1.Location = new System.Drawing.Point(12, 12);
+            this.simpleButton1.Name = "simpleButton1";
+            this.simpleButton1.Size = new System.Drawing.Size(156, 22);
+            this.simpleButton1.StyleController = this.layoutControl1;
+            this.simpleButton1.TabIndex = 4;
+            this.simpleButton1.Text = "simpleButton1";
+            // 
+            // Root
+            // 
+            this.Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+            this.Root.GroupBordersVisible = false;
+            this.Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
+            this.layoutControlItem1,
+            this.layoutControlItem2});
+            this.Root.Name = "Root";
+            this.Root.Size = new System.Drawing.Size(180, 120);
+            this.Root.TextVisible = false;
+            // 
+            // layoutControlItem1
+            // 
+            this.layoutControlItem1.Control = this.simpleButton1;
+            this.layoutControlItem1.Location = new System.Drawing.Point(0, 0);
+            this.layoutControlItem1.Name = "layoutControlItem1";
+            this.layoutControlItem1.Size = new System.Drawing.Size(160, 26);
+            this.layoutControlItem1.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem1.TextVisible = false;
+            // 
+            // layoutControlItem2
+            // 
+            this.layoutControlItem2.Control = this.treeList1;
+            this.layoutControlItem2.Location = new System.Drawing.Point(0, 26);
+            this.layoutControlItem2.Name = "layoutControlItem2";
+            this.layoutControlItem2.Size = new System.Drawing.Size(160, 74);
+            this.layoutControlItem2.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem2.TextVisible = false;
+            // 
+            // XtraForm1
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(668, 634);
+            this.Controls.Add(this.layoutControl1);
+            this.Name = "XtraForm1";
+            this.Text = "XtraForm1";
+            ((System.ComponentModel.ISupportInitialize)(this.treeList1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).EndInit();
+            this.layoutControl1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.Root)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private DevExpress.XtraTreeList.TreeList treeList1;
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private DevExpress.XtraEditors.SimpleButton simpleButton1;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+    }
+}
\ No newline at end of file
diff --git a/WinFormUI/IStation.WinFormUI.MonitorDataSet/XtraForm1.cs b/WinFormUI/IStation.WinFormUI.MonitorDataSet/XtraForm1.cs
new file mode 100644
index 0000000..e1da245
--- /dev/null
+++ b/WinFormUI/IStation.WinFormUI.MonitorDataSet/XtraForm1.cs
@@ -0,0 +1,26 @@
+锘縰sing DevExpress.XtraEditors;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace IStation.WinFormUI.MonitorDataSet
+{
+    public partial class XtraForm1 : DevExpress.XtraEditors.XtraForm
+    {
+        public XtraForm1()
+        {
+            InitializeComponent();
+        }
+
+        private void simpleButton1_Click(object sender, EventArgs e)
+        {
+
+        }
+    }
+}
\ No newline at end of file
diff --git a/WinFormUI/IStation.WinFormUI.MonitorDataSet/XtraForm1.resx b/WinFormUI/IStation.WinFormUI.MonitorDataSet/XtraForm1.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/WinFormUI/IStation.WinFormUI.MonitorDataSet/XtraForm1.resx
@@ -0,0 +1,120 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git "a/WinFormUI/IStation.WinFormUI.MonitorDataSet/\346\233\262\347\272\277\346\257\224\350\276\203/CurveCompareChartMgr.Designer.cs" "b/WinFormUI/IStation.WinFormUI.MonitorDataSet/\346\233\262\347\272\277\346\257\224\350\276\203/CurveCompareChartMgr.Designer.cs"
new file mode 100644
index 0000000..24e3557
--- /dev/null
+++ "b/WinFormUI/IStation.WinFormUI.MonitorDataSet/\346\233\262\347\272\277\346\257\224\350\276\203/CurveCompareChartMgr.Designer.cs"
@@ -0,0 +1,934 @@
+锘�
+namespace IStation.WinFormUI.MonitorDataSet
+{
+    partial class CurveCompareChartMgr
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            DevExpress.XtraCharts.SwiftPlotDiagram swiftPlotDiagram1 = new DevExpress.XtraCharts.SwiftPlotDiagram();
+            DevExpress.XtraCharts.SeriesKeyColorColorizer seriesKeyColorColorizer1 = new DevExpress.XtraCharts.SeriesKeyColorColorizer();
+            DevExpress.XtraCharts.SwiftPlotSeriesView swiftPlotSeriesView1 = new DevExpress.XtraCharts.SwiftPlotSeriesView();
+            DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroup2DColumn chartControlCommandGalleryItemGroup2DColumn1 = new DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroup2DColumn();
+            DevExpress.XtraCharts.UI.CreateBarChartItem createBarChartItem1 = new DevExpress.XtraCharts.UI.CreateBarChartItem();
+            DevExpress.XtraCharts.UI.CreateFullStackedBarChartItem createFullStackedBarChartItem1 = new DevExpress.XtraCharts.UI.CreateFullStackedBarChartItem();
+            DevExpress.XtraCharts.UI.CreateSideBySideFullStackedBarChartItem createSideBySideFullStackedBarChartItem1 = new DevExpress.XtraCharts.UI.CreateSideBySideFullStackedBarChartItem();
+            DevExpress.XtraCharts.UI.CreateSideBySideStackedBarChartItem createSideBySideStackedBarChartItem1 = new DevExpress.XtraCharts.UI.CreateSideBySideStackedBarChartItem();
+            DevExpress.XtraCharts.UI.CreateStackedBarChartItem createStackedBarChartItem1 = new DevExpress.XtraCharts.UI.CreateStackedBarChartItem();
+            DevExpress.XtraCharts.UI.CreateWaterfallChartItem createWaterfallChartItem1 = new DevExpress.XtraCharts.UI.CreateWaterfallChartItem();
+            DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroup3DColumn chartControlCommandGalleryItemGroup3DColumn1 = new DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroup3DColumn();
+            DevExpress.XtraCharts.UI.CreateBar3DChartItem createBar3DChartItem1 = new DevExpress.XtraCharts.UI.CreateBar3DChartItem();
+            DevExpress.XtraCharts.UI.CreateFullStackedBar3DChartItem createFullStackedBar3DChartItem1 = new DevExpress.XtraCharts.UI.CreateFullStackedBar3DChartItem();
+            DevExpress.XtraCharts.UI.CreateManhattanBarChartItem createManhattanBarChartItem1 = new DevExpress.XtraCharts.UI.CreateManhattanBarChartItem();
+            DevExpress.XtraCharts.UI.CreateSideBySideFullStackedBar3DChartItem createSideBySideFullStackedBar3DChartItem1 = new DevExpress.XtraCharts.UI.CreateSideBySideFullStackedBar3DChartItem();
+            DevExpress.XtraCharts.UI.CreateSideBySideStackedBar3DChartItem createSideBySideStackedBar3DChartItem1 = new DevExpress.XtraCharts.UI.CreateSideBySideStackedBar3DChartItem();
+            DevExpress.XtraCharts.UI.CreateStackedBar3DChartItem createStackedBar3DChartItem1 = new DevExpress.XtraCharts.UI.CreateStackedBar3DChartItem();
+            DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroupCylinderColumn chartControlCommandGalleryItemGroupCylinderColumn1 = new DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroupCylinderColumn();
+            DevExpress.XtraCharts.UI.CreateCylinderBar3DChartItem createCylinderBar3DChartItem1 = new DevExpress.XtraCharts.UI.CreateCylinderBar3DChartItem();
+            DevExpress.XtraCharts.UI.CreateCylinderFullStackedBar3DChartItem createCylinderFullStackedBar3DChartItem1 = new DevExpress.XtraCharts.UI.CreateCylinderFullStackedBar3DChartItem();
+            DevExpress.XtraCharts.UI.CreateCylinderManhattanBarChartItem createCylinderManhattanBarChartItem1 = new DevExpress.XtraCharts.UI.CreateCylinderManhattanBarChartItem();
+            DevExpress.XtraCharts.UI.CreateCylinderSideBySideFullStackedBar3DChartItem createCylinderSideBySideFullStackedBar3DChartItem1 = new DevExpress.XtraCharts.UI.CreateCylinderSideBySideFullStackedBar3DChartItem();
+            DevExpress.XtraCharts.UI.CreateCylinderSideBySideStackedBar3DChartItem createCylinderSideBySideStackedBar3DChartItem1 = new DevExpress.XtraCharts.UI.CreateCylinderSideBySideStackedBar3DChartItem();
+            DevExpress.XtraCharts.UI.CreateCylinderStackedBar3DChartItem createCylinderStackedBar3DChartItem1 = new DevExpress.XtraCharts.UI.CreateCylinderStackedBar3DChartItem();
+            DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroupConeColumn chartControlCommandGalleryItemGroupConeColumn1 = new DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroupConeColumn();
+            DevExpress.XtraCharts.UI.CreateConeBar3DChartItem createConeBar3DChartItem1 = new DevExpress.XtraCharts.UI.CreateConeBar3DChartItem();
+            DevExpress.XtraCharts.UI.CreateConeFullStackedBar3DChartItem createConeFullStackedBar3DChartItem1 = new DevExpress.XtraCharts.UI.CreateConeFullStackedBar3DChartItem();
+            DevExpress.XtraCharts.UI.CreateConeManhattanBarChartItem createConeManhattanBarChartItem1 = new DevExpress.XtraCharts.UI.CreateConeManhattanBarChartItem();
+            DevExpress.XtraCharts.UI.CreateConeSideBySideFullStackedBar3DChartItem createConeSideBySideFullStackedBar3DChartItem1 = new DevExpress.XtraCharts.UI.CreateConeSideBySideFullStackedBar3DChartItem();
+            DevExpress.XtraCharts.UI.CreateConeSideBySideStackedBar3DChartItem createConeSideBySideStackedBar3DChartItem1 = new DevExpress.XtraCharts.UI.CreateConeSideBySideStackedBar3DChartItem();
+            DevExpress.XtraCharts.UI.CreateConeStackedBar3DChartItem createConeStackedBar3DChartItem1 = new DevExpress.XtraCharts.UI.CreateConeStackedBar3DChartItem();
+            DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroupPyramidColumn chartControlCommandGalleryItemGroupPyramidColumn1 = new DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroupPyramidColumn();
+            DevExpress.XtraCharts.UI.CreatePyramidBar3DChartItem createPyramidBar3DChartItem1 = new DevExpress.XtraCharts.UI.CreatePyramidBar3DChartItem();
+            DevExpress.XtraCharts.UI.CreatePyramidFullStackedBar3DChartItem createPyramidFullStackedBar3DChartItem1 = new DevExpress.XtraCharts.UI.CreatePyramidFullStackedBar3DChartItem();
+            DevExpress.XtraCharts.UI.CreatePyramidManhattanBarChartItem createPyramidManhattanBarChartItem1 = new DevExpress.XtraCharts.UI.CreatePyramidManhattanBarChartItem();
+            DevExpress.XtraCharts.UI.CreatePyramidSideBySideFullStackedBar3DChartItem createPyramidSideBySideFullStackedBar3DChartItem1 = new DevExpress.XtraCharts.UI.CreatePyramidSideBySideFullStackedBar3DChartItem();
+            DevExpress.XtraCharts.UI.CreatePyramidSideBySideStackedBar3DChartItem createPyramidSideBySideStackedBar3DChartItem1 = new DevExpress.XtraCharts.UI.CreatePyramidSideBySideStackedBar3DChartItem();
+            DevExpress.XtraCharts.UI.CreatePyramidStackedBar3DChartItem createPyramidStackedBar3DChartItem1 = new DevExpress.XtraCharts.UI.CreatePyramidStackedBar3DChartItem();
+            DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroup2DLine chartControlCommandGalleryItemGroup2DLine1 = new DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroup2DLine();
+            DevExpress.XtraCharts.UI.CreateLineChartItem createLineChartItem1 = new DevExpress.XtraCharts.UI.CreateLineChartItem();
+            DevExpress.XtraCharts.UI.CreateFullStackedLineChartItem createFullStackedLineChartItem1 = new DevExpress.XtraCharts.UI.CreateFullStackedLineChartItem();
+            DevExpress.XtraCharts.UI.CreateScatterLineChartItem createScatterLineChartItem1 = new DevExpress.XtraCharts.UI.CreateScatterLineChartItem();
+            DevExpress.XtraCharts.UI.CreateSplineChartItem createSplineChartItem1 = new DevExpress.XtraCharts.UI.CreateSplineChartItem();
+            DevExpress.XtraCharts.UI.CreateStackedLineChartItem createStackedLineChartItem1 = new DevExpress.XtraCharts.UI.CreateStackedLineChartItem();
+            DevExpress.XtraCharts.UI.CreateStepLineChartItem createStepLineChartItem1 = new DevExpress.XtraCharts.UI.CreateStepLineChartItem();
+            DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroup3DLine chartControlCommandGalleryItemGroup3DLine1 = new DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroup3DLine();
+            DevExpress.XtraCharts.UI.CreateLine3DChartItem createLine3DChartItem1 = new DevExpress.XtraCharts.UI.CreateLine3DChartItem();
+            DevExpress.XtraCharts.UI.CreateFullStackedLine3DChartItem createFullStackedLine3DChartItem1 = new DevExpress.XtraCharts.UI.CreateFullStackedLine3DChartItem();
+            DevExpress.XtraCharts.UI.CreateSpline3DChartItem createSpline3DChartItem1 = new DevExpress.XtraCharts.UI.CreateSpline3DChartItem();
+            DevExpress.XtraCharts.UI.CreateStackedLine3DChartItem createStackedLine3DChartItem1 = new DevExpress.XtraCharts.UI.CreateStackedLine3DChartItem();
+            DevExpress.XtraCharts.UI.CreateStepLine3DChartItem createStepLine3DChartItem1 = new DevExpress.XtraCharts.UI.CreateStepLine3DChartItem();
+            DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroup2DPie chartControlCommandGalleryItemGroup2DPie1 = new DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroup2DPie();
+            DevExpress.XtraCharts.UI.CreatePieChartItem createPieChartItem1 = new DevExpress.XtraCharts.UI.CreatePieChartItem();
+            DevExpress.XtraCharts.UI.CreateDoughnutChartItem createDoughnutChartItem1 = new DevExpress.XtraCharts.UI.CreateDoughnutChartItem();
+            DevExpress.XtraCharts.UI.CreateNestedDoughnutChartItem createNestedDoughnutChartItem1 = new DevExpress.XtraCharts.UI.CreateNestedDoughnutChartItem();
+            DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroup3DPie chartControlCommandGalleryItemGroup3DPie1 = new DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroup3DPie();
+            DevExpress.XtraCharts.UI.CreatePie3DChartItem createPie3DChartItem1 = new DevExpress.XtraCharts.UI.CreatePie3DChartItem();
+            DevExpress.XtraCharts.UI.CreateDoughnut3DChartItem createDoughnut3DChartItem1 = new DevExpress.XtraCharts.UI.CreateDoughnut3DChartItem();
+            DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroup2DBar chartControlCommandGalleryItemGroup2DBar1 = new DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroup2DBar();
+            DevExpress.XtraCharts.UI.CreateRotatedBarChartItem createRotatedBarChartItem1 = new DevExpress.XtraCharts.UI.CreateRotatedBarChartItem();
+            DevExpress.XtraCharts.UI.CreateRotatedFullStackedBarChartItem createRotatedFullStackedBarChartItem1 = new DevExpress.XtraCharts.UI.CreateRotatedFullStackedBarChartItem();
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CurveCompareChartMgr));
+            DevExpress.XtraCharts.UI.CreateRotatedSideBySideFullStackedBarChartItem createRotatedSideBySideFullStackedBarChartItem1 = new DevExpress.XtraCharts.UI.CreateRotatedSideBySideFullStackedBarChartItem();
+            DevExpress.XtraCharts.UI.CreateRotatedSideBySideStackedBarChartItem createRotatedSideBySideStackedBarChartItem1 = new DevExpress.XtraCharts.UI.CreateRotatedSideBySideStackedBarChartItem();
+            DevExpress.XtraCharts.UI.CreateRotatedStackedBarChartItem createRotatedStackedBarChartItem1 = new DevExpress.XtraCharts.UI.CreateRotatedStackedBarChartItem();
+            DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroup2DArea chartControlCommandGalleryItemGroup2DArea1 = new DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroup2DArea();
+            DevExpress.XtraCharts.UI.CreateAreaChartItem createAreaChartItem1 = new DevExpress.XtraCharts.UI.CreateAreaChartItem();
+            DevExpress.XtraCharts.UI.CreateFullStackedAreaChartItem createFullStackedAreaChartItem1 = new DevExpress.XtraCharts.UI.CreateFullStackedAreaChartItem();
+            DevExpress.XtraCharts.UI.CreateFullStackedSplineAreaChartItem createFullStackedSplineAreaChartItem1 = new DevExpress.XtraCharts.UI.CreateFullStackedSplineAreaChartItem();
+            DevExpress.XtraCharts.UI.CreateFullStackedStepAreaChartItem createFullStackedStepAreaChartItem1 = new DevExpress.XtraCharts.UI.CreateFullStackedStepAreaChartItem();
+            DevExpress.XtraCharts.UI.CreateSplineAreaChartItem createSplineAreaChartItem1 = new DevExpress.XtraCharts.UI.CreateSplineAreaChartItem();
+            DevExpress.XtraCharts.UI.CreateStackedAreaChartItem createStackedAreaChartItem1 = new DevExpress.XtraCharts.UI.CreateStackedAreaChartItem();
+            DevExpress.XtraCharts.UI.CreateStackedStepAreaChartItem createStackedStepAreaChartItem1 = new DevExpress.XtraCharts.UI.CreateStackedStepAreaChartItem();
+            DevExpress.XtraCharts.UI.CreateStackedSplineAreaChartItem createStackedSplineAreaChartItem1 = new DevExpress.XtraCharts.UI.CreateStackedSplineAreaChartItem();
+            DevExpress.XtraCharts.UI.CreateStepAreaChartItem createStepAreaChartItem1 = new DevExpress.XtraCharts.UI.CreateStepAreaChartItem();
+            DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroup3DArea chartControlCommandGalleryItemGroup3DArea1 = new DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroup3DArea();
+            DevExpress.XtraCharts.UI.CreateArea3DChartItem createArea3DChartItem1 = new DevExpress.XtraCharts.UI.CreateArea3DChartItem();
+            DevExpress.XtraCharts.UI.CreateFullStackedArea3DChartItem createFullStackedArea3DChartItem1 = new DevExpress.XtraCharts.UI.CreateFullStackedArea3DChartItem();
+            DevExpress.XtraCharts.UI.CreateFullStackedSplineArea3DChartItem createFullStackedSplineArea3DChartItem1 = new DevExpress.XtraCharts.UI.CreateFullStackedSplineArea3DChartItem();
+            DevExpress.XtraCharts.UI.CreateSplineArea3DChartItem createSplineArea3DChartItem1 = new DevExpress.XtraCharts.UI.CreateSplineArea3DChartItem();
+            DevExpress.XtraCharts.UI.CreateStackedArea3DChartItem createStackedArea3DChartItem1 = new DevExpress.XtraCharts.UI.CreateStackedArea3DChartItem();
+            DevExpress.XtraCharts.UI.CreateStackedSplineArea3DChartItem createStackedSplineArea3DChartItem1 = new DevExpress.XtraCharts.UI.CreateStackedSplineArea3DChartItem();
+            DevExpress.XtraCharts.UI.CreateStepArea3DChartItem createStepArea3DChartItem1 = new DevExpress.XtraCharts.UI.CreateStepArea3DChartItem();
+            DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroupPoint chartControlCommandGalleryItemGroupPoint1 = new DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroupPoint();
+            DevExpress.XtraCharts.UI.CreatePointChartItem createPointChartItem1 = new DevExpress.XtraCharts.UI.CreatePointChartItem();
+            DevExpress.XtraCharts.UI.CreateBubbleChartItem createBubbleChartItem1 = new DevExpress.XtraCharts.UI.CreateBubbleChartItem();
+            DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroupFunnel chartControlCommandGalleryItemGroupFunnel1 = new DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroupFunnel();
+            DevExpress.XtraCharts.UI.CreateFunnelChartItem createFunnelChartItem1 = new DevExpress.XtraCharts.UI.CreateFunnelChartItem();
+            DevExpress.XtraCharts.UI.CreateFunnel3DChartItem createFunnel3DChartItem1 = new DevExpress.XtraCharts.UI.CreateFunnel3DChartItem();
+            DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroupFinancial chartControlCommandGalleryItemGroupFinancial1 = new DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroupFinancial();
+            DevExpress.XtraCharts.UI.CreateStockChartItem createStockChartItem1 = new DevExpress.XtraCharts.UI.CreateStockChartItem();
+            DevExpress.XtraCharts.UI.CreateCandleStickChartItem createCandleStickChartItem1 = new DevExpress.XtraCharts.UI.CreateCandleStickChartItem();
+            DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroupRadar chartControlCommandGalleryItemGroupRadar1 = new DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroupRadar();
+            DevExpress.XtraCharts.UI.CreateRadarPointChartItem createRadarPointChartItem1 = new DevExpress.XtraCharts.UI.CreateRadarPointChartItem();
+            DevExpress.XtraCharts.UI.CreateRadarLineChartItem createRadarLineChartItem1 = new DevExpress.XtraCharts.UI.CreateRadarLineChartItem();
+            DevExpress.XtraCharts.UI.CreateRadarAreaChartItem createRadarAreaChartItem1 = new DevExpress.XtraCharts.UI.CreateRadarAreaChartItem();
+            DevExpress.XtraCharts.UI.CreateRadarRangeAreaChartItem createRadarRangeAreaChartItem1 = new DevExpress.XtraCharts.UI.CreateRadarRangeAreaChartItem();
+            DevExpress.XtraCharts.UI.CreateScatterRadarLineChartItem createScatterRadarLineChartItem1 = new DevExpress.XtraCharts.UI.CreateScatterRadarLineChartItem();
+            DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroupPolar chartControlCommandGalleryItemGroupPolar1 = new DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroupPolar();
+            DevExpress.XtraCharts.UI.CreatePolarPointChartItem createPolarPointChartItem1 = new DevExpress.XtraCharts.UI.CreatePolarPointChartItem();
+            DevExpress.XtraCharts.UI.CreatePolarLineChartItem createPolarLineChartItem1 = new DevExpress.XtraCharts.UI.CreatePolarLineChartItem();
+            DevExpress.XtraCharts.UI.CreatePolarAreaChartItem createPolarAreaChartItem1 = new DevExpress.XtraCharts.UI.CreatePolarAreaChartItem();
+            DevExpress.XtraCharts.UI.CreatePolarRangeAreaChartItem createPolarRangeAreaChartItem1 = new DevExpress.XtraCharts.UI.CreatePolarRangeAreaChartItem();
+            DevExpress.XtraCharts.UI.CreateScatterPolarLineChartItem createScatterPolarLineChartItem1 = new DevExpress.XtraCharts.UI.CreateScatterPolarLineChartItem();
+            DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroupRange chartControlCommandGalleryItemGroupRange1 = new DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroupRange();
+            DevExpress.XtraCharts.UI.CreateRangeBarChartItem createRangeBarChartItem1 = new DevExpress.XtraCharts.UI.CreateRangeBarChartItem();
+            DevExpress.XtraCharts.UI.CreateSideBySideRangeBarChartItem createSideBySideRangeBarChartItem1 = new DevExpress.XtraCharts.UI.CreateSideBySideRangeBarChartItem();
+            DevExpress.XtraCharts.UI.CreateRangeAreaChartItem createRangeAreaChartItem1 = new DevExpress.XtraCharts.UI.CreateRangeAreaChartItem();
+            DevExpress.XtraCharts.UI.CreateRangeArea3DChartItem createRangeArea3DChartItem1 = new DevExpress.XtraCharts.UI.CreateRangeArea3DChartItem();
+            DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroupGantt chartControlCommandGalleryItemGroupGantt1 = new DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroupGantt();
+            DevExpress.XtraCharts.UI.CreateGanttChartItem createGanttChartItem1 = new DevExpress.XtraCharts.UI.CreateGanttChartItem();
+            DevExpress.XtraCharts.UI.CreateSideBySideGanttChartItem createSideBySideGanttChartItem1 = new DevExpress.XtraCharts.UI.CreateSideBySideGanttChartItem();
+            DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroupBoxPlot chartControlCommandGalleryItemGroupBoxPlot1 = new DevExpress.XtraCharts.UI.ChartControlCommandGalleryItemGroupBoxPlot();
+            DevExpress.XtraCharts.UI.CreateBoxPlotChartItem createBoxPlotChartItem1 = new DevExpress.XtraCharts.UI.CreateBoxPlotChartItem();
+            this.chartControl1 = new DevExpress.XtraCharts.ChartControl();
+            this.multiSelectMonitorPointTreeListCtrl1 = new IStation.WinFormUI.MonitorDataSet.CurveCompareMultiSelectMonitorPointTreeListCtrl();
+            this.commandBarGalleryDropDown1 = new DevExpress.XtraBars.Commands.CommandBarGalleryDropDown(this.components);
+            this.commandBarGalleryDropDown2 = new DevExpress.XtraBars.Commands.CommandBarGalleryDropDown(this.components);
+            this.commandBarGalleryDropDown3 = new DevExpress.XtraBars.Commands.CommandBarGalleryDropDown(this.components);
+            this.commandBarGalleryDropDown4 = new DevExpress.XtraBars.Commands.CommandBarGalleryDropDown(this.components);
+            this.commandBarGalleryDropDown5 = new DevExpress.XtraBars.Commands.CommandBarGalleryDropDown(this.components);
+            this.commandBarGalleryDropDown6 = new DevExpress.XtraBars.Commands.CommandBarGalleryDropDown(this.components);
+            this.commandBarGalleryDropDown7 = new DevExpress.XtraBars.Commands.CommandBarGalleryDropDown(this.components);
+            this.commandBarGalleryDropDown8 = new DevExpress.XtraBars.Commands.CommandBarGalleryDropDown(this.components);
+            this.splitContainerControl1 = new DevExpress.XtraEditors.SplitContainerControl();
+            this.layoutControl = new DevExpress.XtraLayout.LayoutControl();
+            this.layoutControlGroup1 = new DevExpress.XtraLayout.LayoutControlGroup();
+            this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+            ((System.ComponentModel.ISupportInitialize)(this.chartControl1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(swiftPlotDiagram1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(swiftPlotSeriesView1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.commandBarGalleryDropDown1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.commandBarGalleryDropDown2)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.commandBarGalleryDropDown3)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.commandBarGalleryDropDown4)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.commandBarGalleryDropDown5)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.commandBarGalleryDropDown6)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.commandBarGalleryDropDown7)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.commandBarGalleryDropDown8)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.splitContainerControl1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.splitContainerControl1.Panel1)).BeginInit();
+            this.splitContainerControl1.Panel1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.splitContainerControl1.Panel2)).BeginInit();
+            this.splitContainerControl1.Panel2.SuspendLayout();
+            this.splitContainerControl1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControl)).BeginInit();
+            this.layoutControl.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // chartControl1
+            // 
+            swiftPlotDiagram1.AxisX.VisibleInPanesSerializable = "-1";
+            swiftPlotDiagram1.AxisY.Title.Alignment = System.Drawing.StringAlignment.Far;
+            swiftPlotDiagram1.AxisY.Title.Text = "鍗曚綅";
+            swiftPlotDiagram1.AxisY.Title.Visibility = DevExpress.Utils.DefaultBoolean.Default;
+            swiftPlotDiagram1.AxisY.VisibleInPanesSerializable = "-1";
+            swiftPlotDiagram1.EnableAxisXZooming = true;
+            swiftPlotDiagram1.RangeControlDateTimeGridOptions.GridAlignment = DevExpress.XtraCharts.DateTimeGridAlignment.Month;
+            swiftPlotDiagram1.RangeControlDateTimeGridOptions.GridMode = DevExpress.XtraCharts.ChartRangeControlClientGridMode.Manual;
+            swiftPlotDiagram1.RangeControlNumericGridOptions.GridMode = DevExpress.XtraCharts.ChartRangeControlClientGridMode.Manual;
+            swiftPlotDiagram1.RangeControlNumericGridOptions.GridSpacing = 2D;
+            this.chartControl1.Diagram = swiftPlotDiagram1;
+            this.chartControl1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.chartControl1.Legend.AlignmentHorizontal = DevExpress.XtraCharts.LegendAlignmentHorizontal.Center;
+            this.chartControl1.Legend.AlignmentVertical = DevExpress.XtraCharts.LegendAlignmentVertical.TopOutside;
+            this.chartControl1.Legend.Direction = DevExpress.XtraCharts.LegendDirection.LeftToRight;
+            this.chartControl1.Legend.MarkerMode = DevExpress.XtraCharts.LegendMarkerMode.CheckBox;
+            this.chartControl1.Legend.Name = "Default Legend";
+            this.chartControl1.Location = new System.Drawing.Point(0, 0);
+            this.chartControl1.Name = "chartControl1";
+            this.chartControl1.SeriesDataMember = "Name";
+            this.chartControl1.SeriesSerializable = new DevExpress.XtraCharts.Series[0];
+            this.chartControl1.SeriesTemplate.ArgumentDataMember = "Time";
+            this.chartControl1.SeriesTemplate.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.DateTime;
+            this.chartControl1.SeriesTemplate.SeriesColorizer = seriesKeyColorColorizer1;
+            this.chartControl1.SeriesTemplate.SeriesDataMember = "Name";
+            this.chartControl1.SeriesTemplate.ValueDataMembersSerializable = "Value";
+            this.chartControl1.SeriesTemplate.View = swiftPlotSeriesView1;
+            this.chartControl1.Size = new System.Drawing.Size(817, 762);
+            this.chartControl1.TabIndex = 5;
+            // 
+            // multiSelectMonitorPointTreeListCtrl1
+            // 
+            this.multiSelectMonitorPointTreeListCtrl1.Appearance.BackColor = System.Drawing.SystemColors.Control;
+            this.multiSelectMonitorPointTreeListCtrl1.Appearance.Options.UseBackColor = true;
+            this.multiSelectMonitorPointTreeListCtrl1.Location = new System.Drawing.Point(0, 0);
+            this.multiSelectMonitorPointTreeListCtrl1.Name = "multiSelectMonitorPointTreeListCtrl1";
+            this.multiSelectMonitorPointTreeListCtrl1.Size = new System.Drawing.Size(236, 762);
+            this.multiSelectMonitorPointTreeListCtrl1.TabIndex = 0;
+            // 
+            // commandBarGalleryDropDown1
+            // 
+            // 
+            // 
+            // 
+            createBarChartItem1.Caption = "Clustered Column";
+            createBarChartItem1.Description = "Compare values across categories by using vertical rectangles.\r\n\r\nUse it when the" +
+    " order of categories is not important or for displaying item counts such as a hi" +
+    "stogram.";
+            createBarChartItem1.Hint = "Compare values across categories by using vertical rectangles.\r\n\r\nUse it when the" +
+    " order of categories is not important or for displaying item counts such as a hi" +
+    "stogram.";
+            createFullStackedBarChartItem1.Caption = "100% Stacked Column";
+            createFullStackedBarChartItem1.Description = "Compare the percentage that each value contributes to a total across categories b" +
+    "y using vertical rectangles.\r\n\r\nUse it to emphasize the proportion of each data " +
+    "series.";
+            createFullStackedBarChartItem1.Hint = "Compare the percentage that each value contributes to a total across categories b" +
+    "y using vertical rectangles.\r\n\r\nUse it to emphasize the proportion of each data " +
+    "series.";
+            createSideBySideFullStackedBarChartItem1.Caption = "Clustered 100% Stacked Column";
+            createSideBySideFullStackedBarChartItem1.Description = "Combine the advantages of both the 100% Stacked Column and Clustered Column chart" +
+    " types, so that you can stack different columns, and combine them into groups ac" +
+    "ross the same axis value.";
+            createSideBySideFullStackedBarChartItem1.Hint = "Combine the advantages of both the 100% Stacked Column and Clustered Column chart" +
+    " types, so that you can stack different columns, and combine them into groups ac" +
+    "ross the same axis value.";
+            createSideBySideStackedBarChartItem1.Caption = "Clustered Stacked Column";
+            createSideBySideStackedBarChartItem1.Description = "Combine the advantages of both the Stacked Column and Clustered Column chart type" +
+    "s, so that you can stack different columns, and combine them into groups across " +
+    "the same axis value.";
+            createSideBySideStackedBarChartItem1.Hint = "Combine the advantages of both the Stacked Column and Clustered Column chart type" +
+    "s, so that you can stack different columns, and combine them into groups across " +
+    "the same axis value.";
+            createStackedBarChartItem1.Caption = "Stacked Column";
+            createStackedBarChartItem1.Description = "Compare the contribution of each value to a total across categories by using vert" +
+    "ical rectangles.\r\n\r\nUse it to emphasize the total across series for one category" +
+    ".";
+            createStackedBarChartItem1.Hint = "Compare the contribution of each value to a total across categories by using vert" +
+    "ical rectangles.\r\n\r\nUse it to emphasize the total across series for one category" +
+    ".";
+            createWaterfallChartItem1.Caption = "Waterfall";
+            createWaterfallChartItem1.Description = "A Waterfall chart displays a sequence of bars that indicate positive or negative " +
+    "changes.";
+            createWaterfallChartItem1.Hint = "A Waterfall chart displays a sequence of bars that indicate positive or negative " +
+    "changes.";
+            chartControlCommandGalleryItemGroup2DColumn1.Items.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItem[] {
+            createBarChartItem1,
+            createFullStackedBarChartItem1,
+            createSideBySideFullStackedBarChartItem1,
+            createSideBySideStackedBarChartItem1,
+            createStackedBarChartItem1,
+            createWaterfallChartItem1});
+            createBar3DChartItem1.Caption = "3-D Clustered Column";
+            createBar3DChartItem1.Description = "Compare values across categories and display clustered columns in 3-D format.";
+            createBar3DChartItem1.Hint = "Compare values across categories and display clustered columns in 3-D format.";
+            createFullStackedBar3DChartItem1.Caption = "100% Stacked Column in 3-D";
+            createFullStackedBar3DChartItem1.Description = "Compare the percentage each value contributes to a total across categories and di" +
+    "splay 100% stacked columns in 3-D format.";
+            createFullStackedBar3DChartItem1.Hint = "Compare the percentage each value contributes to a total across categories and di" +
+    "splay 100% stacked columns in 3-D format.";
+            createManhattanBarChartItem1.Caption = "3-D Column";
+            createManhattanBarChartItem1.Description = "Compare values across categories and across series on three axes.\r\n\r\nUse it when " +
+    "the categories and series are equally important.";
+            createManhattanBarChartItem1.Hint = "Compare values across categories and across series on three axes.\r\n\r\nUse it when " +
+    "the categories and series are equally important.";
+            createSideBySideFullStackedBar3DChartItem1.Caption = "Clustered 100% Stacked Column in 3-D";
+            createSideBySideFullStackedBar3DChartItem1.Description = "Combine the advantages of both the 100% Stacked Column and Clustered Column chart" +
+    " types in 3-D format, so that you can stack different columns, and combine them " +
+    "into groups across the same axis value.";
+            createSideBySideFullStackedBar3DChartItem1.Hint = "Combine the advantages of both the 100% Stacked Column and Clustered Column chart" +
+    " types in 3-D format, so that you can stack different columns, and combine them " +
+    "into groups across the same axis value.";
+            createSideBySideStackedBar3DChartItem1.Caption = "Clustered Stacked Column in 3-D";
+            createSideBySideStackedBar3DChartItem1.Description = "Combine the advantages of both the Stacked Column and Clustered Column chart type" +
+    "s in 3-D format, so that you can stack different columns, and combine them into " +
+    "groups across the same axis value.";
+            createSideBySideStackedBar3DChartItem1.Hint = "Combine the advantages of both the Stacked Column and Clustered Column chart type" +
+    "s in 3-D format, so that you can stack different columns, and combine them into " +
+    "groups across the same axis value.";
+            createStackedBar3DChartItem1.Caption = "Stacked Column in 3-D";
+            createStackedBar3DChartItem1.Description = "Compare the contribution of each value to a total across categories and display s" +
+    "tacked columns in 3-D format.";
+            createStackedBar3DChartItem1.Hint = "Compare the contribution of each value to a total across categories and display s" +
+    "tacked columns in 3-D format.";
+            chartControlCommandGalleryItemGroup3DColumn1.Items.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItem[] {
+            createBar3DChartItem1,
+            createFullStackedBar3DChartItem1,
+            createManhattanBarChartItem1,
+            createSideBySideFullStackedBar3DChartItem1,
+            createSideBySideStackedBar3DChartItem1,
+            createStackedBar3DChartItem1});
+            createCylinderBar3DChartItem1.Caption = "Clustered Cylinder";
+            createCylinderBar3DChartItem1.Description = "Compare values across categories.";
+            createCylinderBar3DChartItem1.Hint = "Compare values across categories.";
+            createCylinderFullStackedBar3DChartItem1.Caption = "100% Stacked Cylinder";
+            createCylinderFullStackedBar3DChartItem1.Description = "Compare the percentage each value contributes to a total across categories.";
+            createCylinderFullStackedBar3DChartItem1.Hint = "Compare the percentage each value contributes to a total across categories.";
+            createCylinderManhattanBarChartItem1.Caption = "3-D Cylinder";
+            createCylinderManhattanBarChartItem1.Description = "Compare values across categories and across series and display a cylinder chart o" +
+    "n three axes.";
+            createCylinderManhattanBarChartItem1.Hint = "Compare values across categories and across series and display a cylinder chart o" +
+    "n three axes.";
+            createCylinderSideBySideFullStackedBar3DChartItem1.Caption = "Clustered 100% Stacked Cylinder";
+            createCylinderSideBySideFullStackedBar3DChartItem1.Description = "Combine the advantages of both the 100% Stacked Cylinder and Clustered Cylinder c" +
+    "hart types, so that you can stack different cylinders, and combine them into gro" +
+    "ups across the same axis value.";
+            createCylinderSideBySideFullStackedBar3DChartItem1.Hint = "Combine the advantages of both the 100% Stacked Cylinder and Clustered Cylinder c" +
+    "hart types, so that you can stack different cylinders, and combine them into gro" +
+    "ups across the same axis value.";
+            createCylinderSideBySideStackedBar3DChartItem1.Caption = "Clustered Stacked Cylinder";
+            createCylinderSideBySideStackedBar3DChartItem1.Description = "Combine the advantages of both the Stacked Cylinder and Clustered Cylinder chart " +
+    "types, so that you can stack different cylinders, and combine them into groups a" +
+    "cross the same axis value.";
+            createCylinderSideBySideStackedBar3DChartItem1.Hint = "Combine the advantages of both the Stacked Cylinder and Clustered Cylinder chart " +
+    "types, so that you can stack different cylinders, and combine them into groups a" +
+    "cross the same axis value.";
+            createCylinderStackedBar3DChartItem1.Caption = "Stacked Cylinder";
+            createCylinderStackedBar3DChartItem1.Description = "Compare the contribution of each value to a total across categories.";
+            createCylinderStackedBar3DChartItem1.Hint = "Compare the contribution of each value to a total across categories.";
+            chartControlCommandGalleryItemGroupCylinderColumn1.Items.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItem[] {
+            createCylinderBar3DChartItem1,
+            createCylinderFullStackedBar3DChartItem1,
+            createCylinderManhattanBarChartItem1,
+            createCylinderSideBySideFullStackedBar3DChartItem1,
+            createCylinderSideBySideStackedBar3DChartItem1,
+            createCylinderStackedBar3DChartItem1});
+            createConeBar3DChartItem1.Caption = "Clustered Cone";
+            createConeBar3DChartItem1.Description = "Compare values across categories.";
+            createConeBar3DChartItem1.Hint = "Compare values across categories.";
+            createConeFullStackedBar3DChartItem1.Caption = "100% Stacked Cone";
+            createConeFullStackedBar3DChartItem1.Description = "Compare the percentage each value contributes to a total across categories.";
+            createConeFullStackedBar3DChartItem1.Hint = "Compare the percentage each value contributes to a total across categories.";
+            createConeManhattanBarChartItem1.Caption = "3-D Cone";
+            createConeManhattanBarChartItem1.Description = "Compare values across categories and across series and display a cone chart on th" +
+    "ree axes.";
+            createConeManhattanBarChartItem1.Hint = "Compare values across categories and across series and display a cone chart on th" +
+    "ree axes.";
+            createConeSideBySideFullStackedBar3DChartItem1.Caption = "Clustered 100% Stacked Cone";
+            createConeSideBySideFullStackedBar3DChartItem1.Description = "Combine the advantages of both the 100% Stacked Cone and Clustered Cone chart typ" +
+    "es, so that you can stack different cones, and combine them into groups across t" +
+    "he same axis value.";
+            createConeSideBySideFullStackedBar3DChartItem1.Hint = "Combine the advantages of both the 100% Stacked Cone and Clustered Cone chart typ" +
+    "es, so that you can stack different cones, and combine them into groups across t" +
+    "he same axis value.";
+            createConeSideBySideStackedBar3DChartItem1.Caption = "Clustered Stacked Cone";
+            createConeSideBySideStackedBar3DChartItem1.Description = "Combine the advantages of both the Stacked Cone and Clustered Cone chart types, s" +
+    "o that you can stack different cones, and combine them into groups across the sa" +
+    "me axis value.";
+            createConeSideBySideStackedBar3DChartItem1.Hint = "Combine the advantages of both the Stacked Cone and Clustered Cone chart types, s" +
+    "o that you can stack different cones, and combine them into groups across the sa" +
+    "me axis value.";
+            createConeStackedBar3DChartItem1.Caption = "Stacked Cone";
+            createConeStackedBar3DChartItem1.Description = "Compare the contribution of each value to a total across categories.";
+            createConeStackedBar3DChartItem1.Hint = "Compare the contribution of each value to a total across categories.";
+            chartControlCommandGalleryItemGroupConeColumn1.Items.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItem[] {
+            createConeBar3DChartItem1,
+            createConeFullStackedBar3DChartItem1,
+            createConeManhattanBarChartItem1,
+            createConeSideBySideFullStackedBar3DChartItem1,
+            createConeSideBySideStackedBar3DChartItem1,
+            createConeStackedBar3DChartItem1});
+            createPyramidBar3DChartItem1.Caption = "Clustered Pyramid";
+            createPyramidBar3DChartItem1.Description = "Compare values across categories.";
+            createPyramidBar3DChartItem1.Hint = "Compare values across categories.";
+            createPyramidFullStackedBar3DChartItem1.Caption = "100% Stacked Pyramid";
+            createPyramidFullStackedBar3DChartItem1.Description = "Compare the percentage each value contributes to a total across categories.";
+            createPyramidFullStackedBar3DChartItem1.Hint = "Compare the percentage each value contributes to a total across categories.";
+            createPyramidManhattanBarChartItem1.Caption = "3-D Pyramid";
+            createPyramidManhattanBarChartItem1.Description = "Compare values across categories and across series and display a pyramid chart on" +
+    " three axes.";
+            createPyramidManhattanBarChartItem1.Hint = "Compare values across categories and across series and display a pyramid chart on" +
+    " three axes.";
+            createPyramidSideBySideFullStackedBar3DChartItem1.Caption = "Clustered 100% Stacked Pyramid";
+            createPyramidSideBySideFullStackedBar3DChartItem1.Description = "Combine the advantages of both the 100% Stacked Pyramid and Clustered Pyramid cha" +
+    "rt types, so that you can stack different pyramids, and combine them into groups" +
+    " across the same axis value.";
+            createPyramidSideBySideFullStackedBar3DChartItem1.Hint = "Combine the advantages of both the 100% Stacked Pyramid and Clustered Pyramid cha" +
+    "rt types, so that you can stack different pyramids, and combine them into groups" +
+    " across the same axis value.";
+            createPyramidSideBySideStackedBar3DChartItem1.Caption = "Clustered Stacked Pyramid";
+            createPyramidSideBySideStackedBar3DChartItem1.Description = "Combine the advantages of both the Stacked Pyramid and Clustered Pyramid chart ty" +
+    "pes, so that you can stack different pyramids, and combine them into groups acro" +
+    "ss the same axis value.";
+            createPyramidSideBySideStackedBar3DChartItem1.Hint = "Combine the advantages of both the Stacked Pyramid and Clustered Pyramid chart ty" +
+    "pes, so that you can stack different pyramids, and combine them into groups acro" +
+    "ss the same axis value.";
+            createPyramidStackedBar3DChartItem1.Caption = "Stacked Pyramid";
+            createPyramidStackedBar3DChartItem1.Description = "Compare the contribution of each value to a total across categories.";
+            createPyramidStackedBar3DChartItem1.Hint = "Compare the contribution of each value to a total across categories.";
+            chartControlCommandGalleryItemGroupPyramidColumn1.Items.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItem[] {
+            createPyramidBar3DChartItem1,
+            createPyramidFullStackedBar3DChartItem1,
+            createPyramidManhattanBarChartItem1,
+            createPyramidSideBySideFullStackedBar3DChartItem1,
+            createPyramidSideBySideStackedBar3DChartItem1,
+            createPyramidStackedBar3DChartItem1});
+            this.commandBarGalleryDropDown1.Gallery.Groups.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItemGroup[] {
+            chartControlCommandGalleryItemGroup2DColumn1,
+            chartControlCommandGalleryItemGroup3DColumn1,
+            chartControlCommandGalleryItemGroupCylinderColumn1,
+            chartControlCommandGalleryItemGroupConeColumn1,
+            chartControlCommandGalleryItemGroupPyramidColumn1});
+            this.commandBarGalleryDropDown1.Manager = null;
+            this.commandBarGalleryDropDown1.Name = "commandBarGalleryDropDown1";
+            // 
+            // commandBarGalleryDropDown2
+            // 
+            // 
+            // 
+            // 
+            createLineChartItem1.Caption = "Line";
+            createLineChartItem1.Description = "Displays trend overtime (dates, years) or ordered categories. Useful when there a" +
+    "re many data points and the order is important.";
+            createLineChartItem1.Hint = "Displays trend overtime (dates, years) or ordered categories. Useful when there a" +
+    "re many data points and the order is important.";
+            createFullStackedLineChartItem1.Caption = "100% Stacked Line";
+            createFullStackedLineChartItem1.Description = "Displays the trend of the percentage each value contributes over time or ordered " +
+    "categories.";
+            createFullStackedLineChartItem1.Hint = "Displays the trend of the percentage each value contributes over time or ordered " +
+    "categories.";
+            createScatterLineChartItem1.Caption = "Scatter Line";
+            createScatterLineChartItem1.Description = "Displays series points in the same order as they appear in the collection.";
+            createScatterLineChartItem1.Hint = "Displays series points in the same order as they appear in the collection.";
+            createSplineChartItem1.Caption = "Spline";
+            createSplineChartItem1.Description = "Plot a fitted curve through each data point in a series.";
+            createSplineChartItem1.Hint = "Plot a fitted curve through each data point in a series.";
+            createStackedLineChartItem1.Caption = "Stacked Line";
+            createStackedLineChartItem1.Description = "Displays the trend of the contribution of each value over time or ordered categor" +
+    "ies.";
+            createStackedLineChartItem1.Hint = "Displays the trend of the contribution of each value over time or ordered categor" +
+    "ies.";
+            createStepLineChartItem1.Caption = "Step Line";
+            createStepLineChartItem1.Description = "Show to what extent values have changed for different points in the same series.";
+            createStepLineChartItem1.Hint = "Show to what extent values have changed for different points in the same series.";
+            chartControlCommandGalleryItemGroup2DLine1.Items.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItem[] {
+            createLineChartItem1,
+            createFullStackedLineChartItem1,
+            createScatterLineChartItem1,
+            createSplineChartItem1,
+            createStackedLineChartItem1,
+            createStepLineChartItem1});
+            createLine3DChartItem1.Caption = "3-D Line";
+            createLine3DChartItem1.Description = "Displays each row or column of data as a 3-D ribbon on three axes.";
+            createLine3DChartItem1.Hint = "Displays each row or column of data as a 3-D ribbon on three axes.";
+            createFullStackedLine3DChartItem1.Caption = "100% Stacked Line in 3-D";
+            createFullStackedLine3DChartItem1.Description = "Displays all series stacked and is useful when it is necessary to compare how muc" +
+    "h each series adds to the total aggregate value for specific arguments (as perce" +
+    "nts).";
+            createFullStackedLine3DChartItem1.Hint = "Displays all series stacked and is useful when it is necessary to compare how muc" +
+    "h each series adds to the total aggregate value for specific arguments (as perce" +
+    "nts).";
+            createSpline3DChartItem1.Caption = "3-D Spline";
+            createSpline3DChartItem1.Description = "Plot a fitted curve through each data point in a series.";
+            createSpline3DChartItem1.Hint = "Plot a fitted curve through each data point in a series.";
+            createStackedLine3DChartItem1.Caption = "Stacked Line in 3-D";
+            createStackedLine3DChartItem1.Description = "Displays all points from different series in a stacked manner and is useful when " +
+    "it is necessary to compare how much each series adds to the total aggregate valu" +
+    "e for specific arguments.";
+            createStackedLine3DChartItem1.Hint = "Displays all points from different series in a stacked manner and is useful when " +
+    "it is necessary to compare how much each series adds to the total aggregate valu" +
+    "e for specific arguments.";
+            createStepLine3DChartItem1.Caption = "Step Line in 3-D";
+            createStepLine3DChartItem1.Description = "Show to what extent values have changed for different points in the same series.";
+            createStepLine3DChartItem1.Hint = "Show to what extent values have changed for different points in the same series.";
+            chartControlCommandGalleryItemGroup3DLine1.Items.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItem[] {
+            createLine3DChartItem1,
+            createFullStackedLine3DChartItem1,
+            createSpline3DChartItem1,
+            createStackedLine3DChartItem1,
+            createStepLine3DChartItem1});
+            this.commandBarGalleryDropDown2.Gallery.Groups.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItemGroup[] {
+            chartControlCommandGalleryItemGroup2DLine1,
+            chartControlCommandGalleryItemGroup3DLine1});
+            this.commandBarGalleryDropDown2.Manager = null;
+            this.commandBarGalleryDropDown2.Name = "commandBarGalleryDropDown2";
+            // 
+            // commandBarGalleryDropDown3
+            // 
+            // 
+            // 
+            // 
+            createPieChartItem1.Caption = "Pie";
+            createPieChartItem1.Description = "Displays the contribution of each value to a total.\r\n\r\nUse it when the values can" +
+    " be added together or when you have only one data series and all values are posi" +
+    "tive.";
+            createPieChartItem1.Hint = "Displays the contribution of each value to a total.\r\n\r\nUse it when the values can" +
+    " be added together or when you have only one data series and all values are posi" +
+    "tive.";
+            createDoughnutChartItem1.Caption = "Doughnut";
+            createDoughnutChartItem1.Description = "Displays the contribution of each value to a total like a pie chart, but it can c" +
+    "ontain multiple series.";
+            createDoughnutChartItem1.Hint = "Displays the contribution of each value to a total like a pie chart, but it can c" +
+    "ontain multiple series.";
+            createNestedDoughnutChartItem1.Caption = "Nested Doughnut";
+            createNestedDoughnutChartItem1.Description = "Displays the contribution of each value to a total while comparing series with on" +
+    "e doughnut nested in another one.";
+            createNestedDoughnutChartItem1.Hint = "Displays the contribution of each value to a total while comparing series with on" +
+    "e doughnut nested in another one.";
+            chartControlCommandGalleryItemGroup2DPie1.Items.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItem[] {
+            createPieChartItem1,
+            createDoughnutChartItem1,
+            createNestedDoughnutChartItem1});
+            createPie3DChartItem1.Caption = "Pie in 3-D";
+            createPie3DChartItem1.Description = "Displays the contribution of each value to a total.";
+            createPie3DChartItem1.Hint = "Displays the contribution of each value to a total.";
+            createDoughnut3DChartItem1.Caption = "Doughnut in 3-D";
+            createDoughnut3DChartItem1.Description = "Compare the percentage values of different point arguments in the same series, an" +
+    "d illustrate these values as easy to understand pie slices, but with a hole in i" +
+    "ts center.";
+            createDoughnut3DChartItem1.Hint = "Compare the percentage values of different point arguments in the same series, an" +
+    "d illustrate these values as easy to understand pie slices, but with a hole in i" +
+    "ts center.";
+            chartControlCommandGalleryItemGroup3DPie1.Items.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItem[] {
+            createPie3DChartItem1,
+            createDoughnut3DChartItem1});
+            this.commandBarGalleryDropDown3.Gallery.Groups.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItemGroup[] {
+            chartControlCommandGalleryItemGroup2DPie1,
+            chartControlCommandGalleryItemGroup3DPie1});
+            this.commandBarGalleryDropDown3.Manager = null;
+            this.commandBarGalleryDropDown3.Name = "commandBarGalleryDropDown3";
+            // 
+            // commandBarGalleryDropDown4
+            // 
+            // 
+            // 
+            // 
+            createRotatedBarChartItem1.Caption = "Bar";
+            createRotatedBarChartItem1.Description = "Insert a bar chart.\r\n\r\nBar charts are the best chart type for comparing multiple " +
+    "values.";
+            createRotatedBarChartItem1.Hint = "Insert a bar chart.\r\n\r\nBar charts are the best chart type for comparing multiple " +
+    "values.";
+            createRotatedFullStackedBarChartItem1.Caption = "100% Stacked Bar";
+            createRotatedFullStackedBarChartItem1.Description = resources.QueryString("createRotatedFullStackedBarChartItem1.Description");
+            createRotatedFullStackedBarChartItem1.Hint = resources.QueryString("createRotatedFullStackedBarChartItem1.Hint");
+            createRotatedSideBySideFullStackedBarChartItem1.Caption = "Clustered 100% Stacked Bar";
+            createRotatedSideBySideFullStackedBarChartItem1.Description = "Combine the advantages of both the 100% Stacked Bar and Clustered Bar chart types" +
+    ", so you can stack different bars, and combine them into groups across the same " +
+    "axis value.";
+            createRotatedSideBySideFullStackedBarChartItem1.Hint = "Combine the advantages of both the 100% Stacked Bar and Clustered Bar chart types" +
+    ", so you can stack different bars, and combine them into groups across the same " +
+    "axis value.";
+            createRotatedSideBySideStackedBarChartItem1.Caption = "Clustered Stacked Bar";
+            createRotatedSideBySideStackedBarChartItem1.Description = "Combine the advantages of both the Stacked Bar and Clustered Bar chart types, so " +
+    "that you can stack different bars, and combine them into groups across the same " +
+    "axis value.";
+            createRotatedSideBySideStackedBarChartItem1.Hint = "Combine the advantages of both the Stacked Bar and Clustered Bar chart types, so " +
+    "that you can stack different bars, and combine them into groups across the same " +
+    "axis value.";
+            createRotatedStackedBarChartItem1.Caption = "Stacked Bar";
+            createRotatedStackedBarChartItem1.Description = "Compare the contribution of each value to a total across categories by using hori" +
+    "zontal rectangles.";
+            createRotatedStackedBarChartItem1.Hint = "Compare the contribution of each value to a total across categories by using hori" +
+    "zontal rectangles.";
+            chartControlCommandGalleryItemGroup2DBar1.Items.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItem[] {
+            createRotatedBarChartItem1,
+            createRotatedFullStackedBarChartItem1,
+            createRotatedSideBySideFullStackedBarChartItem1,
+            createRotatedSideBySideStackedBarChartItem1,
+            createRotatedStackedBarChartItem1});
+            this.commandBarGalleryDropDown4.Gallery.Groups.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItemGroup[] {
+            chartControlCommandGalleryItemGroup2DBar1});
+            this.commandBarGalleryDropDown4.Manager = null;
+            this.commandBarGalleryDropDown4.Name = "commandBarGalleryDropDown4";
+            // 
+            // commandBarGalleryDropDown5
+            // 
+            // 
+            // 
+            // 
+            createAreaChartItem1.Caption = "Area";
+            createAreaChartItem1.Description = "Displays the trend of values over time or categories.";
+            createAreaChartItem1.Hint = "Displays the trend of values over time or categories.";
+            createFullStackedAreaChartItem1.Caption = "100% Stacked Area";
+            createFullStackedAreaChartItem1.Description = "Displays the trend of the percentage each value contributes over time or categori" +
+    "es.\r\n\r\nUse it to emphasize the trend in the proportion of each series.";
+            createFullStackedAreaChartItem1.Hint = "Displays the trend of the percentage each value contributes over time or categori" +
+    "es.\r\n\r\nUse it to emphasize the trend in the proportion of each series.";
+            createFullStackedSplineAreaChartItem1.Caption = "100% Stacked Spline Area";
+            createFullStackedSplineAreaChartItem1.Description = "Behave similar to 100% Stacked Area, but plot a fitted curve through each data po" +
+    "int in a series.";
+            createFullStackedSplineAreaChartItem1.Hint = "Behave similar to 100% Stacked Area, but plot a fitted curve through each data po" +
+    "int in a series.";
+            createFullStackedStepAreaChartItem1.Caption = "100% Stacked Step Area";
+            createFullStackedStepAreaChartItem1.Description = "Behaves similarly to the 100% Stacked Area Chart but connects data points using h" +
+    "orizontal and vertical lines.";
+            createFullStackedStepAreaChartItem1.Hint = "Behaves similarly to the 100% Stacked Area Chart but connects data points using h" +
+    "orizontal and vertical lines.";
+            createSplineAreaChartItem1.Caption = "Spline Area";
+            createSplineAreaChartItem1.Description = "Behave similar to Area Chart but plot a fitted curve through each data point in a" +
+    " series.";
+            createSplineAreaChartItem1.Hint = "Behave similar to Area Chart but plot a fitted curve through each data point in a" +
+    " series.";
+            createStackedAreaChartItem1.Caption = "Stacked Area";
+            createStackedAreaChartItem1.Description = "Displays the trend of the contribution of each value over time or categories.\r\n\r\n" +
+    "Use it to emphasize the trend in the total across series for one category.";
+            createStackedAreaChartItem1.Hint = "Displays the trend of the contribution of each value over time or categories.\r\n\r\n" +
+    "Use it to emphasize the trend in the total across series for one category.";
+            createStackedStepAreaChartItem1.Caption = "Stacked Step Area";
+            createStackedStepAreaChartItem1.Description = "Behaves similarly to the Stacked Area Chart but connects data points using horizo" +
+    "ntal and vertical lines.";
+            createStackedStepAreaChartItem1.Hint = "Behaves similarly to the Stacked Area Chart but connects data points using horizo" +
+    "ntal and vertical lines.";
+            createStackedSplineAreaChartItem1.Caption = "Stacked Spline Area";
+            createStackedSplineAreaChartItem1.Description = "Behave similar to Stacked Area Chart but plot a fitted curve through each data po" +
+    "int in a series.";
+            createStackedSplineAreaChartItem1.Hint = "Behave similar to Stacked Area Chart but plot a fitted curve through each data po" +
+    "int in a series.";
+            createStepAreaChartItem1.Caption = "Step Area";
+            createStepAreaChartItem1.Description = "Show how much values have changed for different points of the same series.";
+            createStepAreaChartItem1.Hint = "Show how much values have changed for different points of the same series.";
+            chartControlCommandGalleryItemGroup2DArea1.Items.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItem[] {
+            createAreaChartItem1,
+            createFullStackedAreaChartItem1,
+            createFullStackedSplineAreaChartItem1,
+            createFullStackedStepAreaChartItem1,
+            createSplineAreaChartItem1,
+            createStackedAreaChartItem1,
+            createStackedStepAreaChartItem1,
+            createStackedSplineAreaChartItem1,
+            createStepAreaChartItem1});
+            createArea3DChartItem1.Caption = "3-D Area";
+            createArea3DChartItem1.Description = resources.QueryString("createArea3DChartItem1.Description");
+            createArea3DChartItem1.Hint = resources.QueryString("createArea3DChartItem1.Hint");
+            createFullStackedArea3DChartItem1.Caption = "100% Stacked Area in 3-D";
+            createFullStackedArea3DChartItem1.Description = resources.QueryString("createFullStackedArea3DChartItem1.Description");
+            createFullStackedArea3DChartItem1.Hint = resources.QueryString("createFullStackedArea3DChartItem1.Hint");
+            createFullStackedSplineArea3DChartItem1.Caption = "100% Stacked Spline Area in 3-D";
+            createFullStackedSplineArea3DChartItem1.Description = "Behave similar to 100% Stacked Area Chart in 3D, but plot a fitted curve through " +
+    "each data point in a series.";
+            createFullStackedSplineArea3DChartItem1.Hint = "Behave similar to 100% Stacked Area Chart in 3D, but plot a fitted curve through " +
+    "each data point in a series.";
+            createSplineArea3DChartItem1.Caption = "Spline Area in 3-D";
+            createSplineArea3DChartItem1.Description = "Behave similar to 3D Area Chart, but plot a fitted curve through each data point " +
+    "in a series.";
+            createSplineArea3DChartItem1.Hint = "Behave similar to 3D Area Chart, but plot a fitted curve through each data point " +
+    "in a series.";
+            createStackedArea3DChartItem1.Caption = "Stacked Area in 3-D";
+            createStackedArea3DChartItem1.Description = "Displays series as areas on a diagram, so that the value of each data point is ag" +
+    "gregated with the underlying data points\' values.";
+            createStackedArea3DChartItem1.Hint = "Displays series as areas on a diagram, so that the value of each data point is ag" +
+    "gregated with the underlying data points\' values.";
+            createStackedSplineArea3DChartItem1.Caption = "Stacked Spline Area in 3-D";
+            createStackedSplineArea3DChartItem1.Description = "Behave similar to Stacked Area in 3D chart, but plot a fitted curve through each " +
+    "data point in a series.";
+            createStackedSplineArea3DChartItem1.Hint = "Behave similar to Stacked Area in 3D chart, but plot a fitted curve through each " +
+    "data point in a series.";
+            createStepArea3DChartItem1.Caption = "Step Area in 3-D";
+            createStepArea3DChartItem1.Description = "Show to what extent values have changed for different points in the same series.";
+            createStepArea3DChartItem1.Hint = "Show to what extent values have changed for different points in the same series.";
+            chartControlCommandGalleryItemGroup3DArea1.Items.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItem[] {
+            createArea3DChartItem1,
+            createFullStackedArea3DChartItem1,
+            createFullStackedSplineArea3DChartItem1,
+            createSplineArea3DChartItem1,
+            createStackedArea3DChartItem1,
+            createStackedSplineArea3DChartItem1,
+            createStepArea3DChartItem1});
+            this.commandBarGalleryDropDown5.Gallery.Groups.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItemGroup[] {
+            chartControlCommandGalleryItemGroup2DArea1,
+            chartControlCommandGalleryItemGroup3DArea1});
+            this.commandBarGalleryDropDown5.Manager = null;
+            this.commandBarGalleryDropDown5.Name = "commandBarGalleryDropDown5";
+            // 
+            // commandBarGalleryDropDown6
+            // 
+            // 
+            // 
+            // 
+            createPointChartItem1.Caption = "Point";
+            createPointChartItem1.Description = "Use it when it\'s necessary to show stand-alone data points on the same chart plot" +
+    ".";
+            createPointChartItem1.Hint = "Use it when it\'s necessary to show stand-alone data points on the same chart plot" +
+    ".";
+            createBubbleChartItem1.Caption = "Bubble";
+            createBubbleChartItem1.Description = "Resemble a Scatter chart, but compare sets of three values instead of two. The th" +
+    "ird value determines the size of the bubble marker.";
+            createBubbleChartItem1.Hint = "Resemble a Scatter chart, but compare sets of three values instead of two. The th" +
+    "ird value determines the size of the bubble marker.";
+            chartControlCommandGalleryItemGroupPoint1.Items.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItem[] {
+            createPointChartItem1,
+            createBubbleChartItem1});
+            createFunnelChartItem1.Caption = "Funnel";
+            createFunnelChartItem1.Description = resources.QueryString("createFunnelChartItem1.Description");
+            createFunnelChartItem1.Hint = resources.QueryString("createFunnelChartItem1.Hint");
+            createFunnel3DChartItem1.Caption = "3-D Funnel";
+            createFunnel3DChartItem1.Description = resources.QueryString("createFunnel3DChartItem1.Description");
+            createFunnel3DChartItem1.Hint = resources.QueryString("createFunnel3DChartItem1.Hint");
+            chartControlCommandGalleryItemGroupFunnel1.Items.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItem[] {
+            createFunnelChartItem1,
+            createFunnel3DChartItem1});
+            createStockChartItem1.Caption = "Stock";
+            createStockChartItem1.Description = resources.QueryString("createStockChartItem1.Description");
+            createStockChartItem1.Hint = resources.QueryString("createStockChartItem1.Hint");
+            createCandleStickChartItem1.Caption = "Candle Stick";
+            createCandleStickChartItem1.Description = resources.QueryString("createCandleStickChartItem1.Description");
+            createCandleStickChartItem1.Hint = resources.QueryString("createCandleStickChartItem1.Hint");
+            chartControlCommandGalleryItemGroupFinancial1.Items.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItem[] {
+            createStockChartItem1,
+            createCandleStickChartItem1});
+            createRadarPointChartItem1.Caption = "Radar Point";
+            createRadarPointChartItem1.Description = "Show points from two or more different series on the same points arguments on a c" +
+    "ircular grid that has multiple axes along which data can be plotted.";
+            createRadarPointChartItem1.Hint = "Show points from two or more different series on the same points arguments on a c" +
+    "ircular grid that has multiple axes along which data can be plotted.";
+            createRadarLineChartItem1.Caption = "Radar Line";
+            createRadarLineChartItem1.Description = "Show trends for several series and compare their values for the same points argum" +
+    "ents on a circular grid that has multiple axes along which data can be plotted.";
+            createRadarLineChartItem1.Hint = "Show trends for several series and compare their values for the same points argum" +
+    "ents on a circular grid that has multiple axes along which data can be plotted.";
+            createRadarAreaChartItem1.Caption = "Radar Area";
+            createRadarAreaChartItem1.Description = "Displays series as filled area on a circular grid that has multiple axes along wh" +
+    "ich data can be plotted.";
+            createRadarAreaChartItem1.Hint = "Displays series as filled area on a circular grid that has multiple axes along wh" +
+    "ich data can be plotted.";
+            createRadarRangeAreaChartItem1.Caption = "Radar Range Area";
+            createRadarRangeAreaChartItem1.Description = resources.QueryString("createRadarRangeAreaChartItem1.Description");
+            createRadarRangeAreaChartItem1.Hint = resources.QueryString("createRadarRangeAreaChartItem1.Hint");
+            createScatterRadarLineChartItem1.Caption = "Scatter Radar Line";
+            createScatterRadarLineChartItem1.Description = resources.QueryString("createScatterRadarLineChartItem1.Description");
+            createScatterRadarLineChartItem1.Hint = resources.QueryString("createScatterRadarLineChartItem1.Hint");
+            chartControlCommandGalleryItemGroupRadar1.Items.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItem[] {
+            createRadarPointChartItem1,
+            createRadarLineChartItem1,
+            createRadarAreaChartItem1,
+            createRadarRangeAreaChartItem1,
+            createScatterRadarLineChartItem1});
+            createPolarPointChartItem1.Caption = "Polar Point";
+            createPolarPointChartItem1.Description = "Show points from two or more different series on the same circular diagram on the" +
+    " basis of angles.";
+            createPolarPointChartItem1.Hint = "Show points from two or more different series on the same circular diagram on the" +
+    " basis of angles.";
+            createPolarLineChartItem1.Caption = "Polar Line";
+            createPolarLineChartItem1.Description = "Show trends for several series and compare their values for the same points argum" +
+    "ents on a circular diagram on the basis of angles.";
+            createPolarLineChartItem1.Hint = "Show trends for several series and compare their values for the same points argum" +
+    "ents on a circular diagram on the basis of angles.";
+            createPolarAreaChartItem1.Caption = "Polar Area";
+            createPolarAreaChartItem1.Description = "Displays series as filled area on a circular diagram on the basis of angles.";
+            createPolarAreaChartItem1.Hint = "Displays series as filled area on a circular diagram on the basis of angles.";
+            createPolarRangeAreaChartItem1.Caption = "Polar Range Area";
+            createPolarRangeAreaChartItem1.Description = resources.QueryString("createPolarRangeAreaChartItem1.Description");
+            createPolarRangeAreaChartItem1.Hint = resources.QueryString("createPolarRangeAreaChartItem1.Hint");
+            createScatterPolarLineChartItem1.Caption = "Scatter Polar Line";
+            createScatterPolarLineChartItem1.Description = resources.QueryString("createScatterPolarLineChartItem1.Description");
+            createScatterPolarLineChartItem1.Hint = resources.QueryString("createScatterPolarLineChartItem1.Hint");
+            chartControlCommandGalleryItemGroupPolar1.Items.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItem[] {
+            createPolarPointChartItem1,
+            createPolarLineChartItem1,
+            createPolarAreaChartItem1,
+            createPolarRangeAreaChartItem1,
+            createScatterPolarLineChartItem1});
+            createRangeBarChartItem1.Caption = "Range Column";
+            createRangeBarChartItem1.Description = "Displays vertical columns along the Y-axis (the axis of values). Each column repr" +
+    "esents a range of data for each argument value.";
+            createRangeBarChartItem1.Hint = "Displays vertical columns along the Y-axis (the axis of values). Each column repr" +
+    "esents a range of data for each argument value.";
+            createSideBySideRangeBarChartItem1.Caption = "Clustered Range Column";
+            createSideBySideRangeBarChartItem1.Description = "Show activity columns from different series grouped by their arguments. Each colu" +
+    "mn represents a range of data with two values for each argument value.";
+            createSideBySideRangeBarChartItem1.Hint = "Show activity columns from different series grouped by their arguments. Each colu" +
+    "mn represents a range of data with two values for each argument value.";
+            createRangeAreaChartItem1.Caption = "Range Area";
+            createRangeAreaChartItem1.Description = resources.QueryString("createRangeAreaChartItem1.Description");
+            createRangeAreaChartItem1.Hint = resources.QueryString("createRangeAreaChartItem1.Hint");
+            createRangeArea3DChartItem1.Caption = "Range Area in 3-D";
+            createRangeArea3DChartItem1.Description = resources.QueryString("createRangeArea3DChartItem1.Description");
+            createRangeArea3DChartItem1.Hint = resources.QueryString("createRangeArea3DChartItem1.Hint");
+            chartControlCommandGalleryItemGroupRange1.Items.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItem[] {
+            createRangeBarChartItem1,
+            createSideBySideRangeBarChartItem1,
+            createRangeAreaChartItem1,
+            createRangeArea3DChartItem1});
+            createGanttChartItem1.Caption = "Gantt";
+            createGanttChartItem1.Description = "Track different activities during the time frame.";
+            createGanttChartItem1.Hint = "Track different activities during the time frame.";
+            createSideBySideGanttChartItem1.Caption = "Clustered Gantt";
+            createSideBySideGanttChartItem1.Description = resources.QueryString("createSideBySideGanttChartItem1.Description");
+            createSideBySideGanttChartItem1.Hint = resources.QueryString("createSideBySideGanttChartItem1.Hint");
+            chartControlCommandGalleryItemGroupGantt1.Items.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItem[] {
+            createGanttChartItem1,
+            createSideBySideGanttChartItem1});
+            createBoxPlotChartItem1.Caption = "BoxPlot";
+            createBoxPlotChartItem1.Description = resources.QueryString("createBoxPlotChartItem1.Description");
+            createBoxPlotChartItem1.Hint = resources.QueryString("createBoxPlotChartItem1.Hint");
+            chartControlCommandGalleryItemGroupBoxPlot1.Items.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItem[] {
+            createBoxPlotChartItem1});
+            this.commandBarGalleryDropDown6.Gallery.Groups.AddRange(new DevExpress.XtraBars.Ribbon.GalleryItemGroup[] {
+            chartControlCommandGalleryItemGroupPoint1,
+            chartControlCommandGalleryItemGroupFunnel1,
+            chartControlCommandGalleryItemGroupFinancial1,
+            chartControlCommandGalleryItemGroupRadar1,
+            chartControlCommandGalleryItemGroupPolar1,
+            chartControlCommandGalleryItemGroupRange1,
+            chartControlCommandGalleryItemGroupGantt1,
+            chartControlCommandGalleryItemGroupBoxPlot1});
+            this.commandBarGalleryDropDown6.Manager = null;
+            this.commandBarGalleryDropDown6.Name = "commandBarGalleryDropDown6";
+            // 
+            // commandBarGalleryDropDown7
+            // 
+            this.commandBarGalleryDropDown7.Manager = null;
+            this.commandBarGalleryDropDown7.Name = "commandBarGalleryDropDown7";
+            // 
+            // commandBarGalleryDropDown8
+            // 
+            this.commandBarGalleryDropDown8.Manager = null;
+            this.commandBarGalleryDropDown8.Name = "commandBarGalleryDropDown8";
+            // 
+            // splitContainerControl1
+            // 
+            this.splitContainerControl1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.splitContainerControl1.Location = new System.Drawing.Point(0, 0);
+            this.splitContainerControl1.Name = "splitContainerControl1";
+            // 
+            // splitContainerControl1.Panel1
+            // 
+            this.splitContainerControl1.Panel1.Controls.Add(this.layoutControl);
+            this.splitContainerControl1.Panel1.Text = "Panel1";
+            // 
+            // splitContainerControl1.Panel2
+            // 
+            this.splitContainerControl1.Panel2.Controls.Add(this.chartControl1);
+            this.splitContainerControl1.Panel2.Text = "Panel2";
+            this.splitContainerControl1.Size = new System.Drawing.Size(1063, 762);
+            this.splitContainerControl1.SplitterPosition = 236;
+            this.splitContainerControl1.TabIndex = 1;
+            // 
+            // layoutControl
+            // 
+            this.layoutControl.Controls.Add(this.multiSelectMonitorPointTreeListCtrl1);
+            this.layoutControl.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.layoutControl.Location = new System.Drawing.Point(0, 0);
+            this.layoutControl.Name = "layoutControl";
+            this.layoutControl.Root = this.layoutControlGroup1;
+            this.layoutControl.Size = new System.Drawing.Size(236, 762);
+            this.layoutControl.TabIndex = 0;
+            this.layoutControl.Text = "layoutControl2";
+            // 
+            // layoutControlGroup1
+            // 
+            this.layoutControlGroup1.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+            this.layoutControlGroup1.GroupBordersVisible = false;
+            this.layoutControlGroup1.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
+            this.layoutControlItem1});
+            this.layoutControlGroup1.Name = "layoutControlGroup1";
+            this.layoutControlGroup1.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            this.layoutControlGroup1.Size = new System.Drawing.Size(236, 762);
+            this.layoutControlGroup1.TextVisible = false;
+            // 
+            // layoutControlItem1
+            // 
+            this.layoutControlItem1.Control = this.multiSelectMonitorPointTreeListCtrl1;
+            this.layoutControlItem1.Location = new System.Drawing.Point(0, 0);
+            this.layoutControlItem1.Name = "layoutControlItem1";
+            this.layoutControlItem1.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            this.layoutControlItem1.Size = new System.Drawing.Size(236, 762);
+            this.layoutControlItem1.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem1.TextVisible = false;
+            // 
+            // CurveCompareChartMgr
+            // 
+            this.Appearance.BackColor = System.Drawing.SystemColors.Control;
+            this.Appearance.Options.UseBackColor = true;
+            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.splitContainerControl1);
+            this.Name = "CurveCompareChartMgr";
+            this.Size = new System.Drawing.Size(1063, 762);
+            ((System.ComponentModel.ISupportInitialize)(swiftPlotDiagram1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(swiftPlotSeriesView1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.chartControl1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.commandBarGalleryDropDown1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.commandBarGalleryDropDown2)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.commandBarGalleryDropDown3)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.commandBarGalleryDropDown4)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.commandBarGalleryDropDown5)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.commandBarGalleryDropDown6)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.commandBarGalleryDropDown7)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.commandBarGalleryDropDown8)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.splitContainerControl1.Panel1)).EndInit();
+            this.splitContainerControl1.Panel1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.splitContainerControl1.Panel2)).EndInit();
+            this.splitContainerControl1.Panel2.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.splitContainerControl1)).EndInit();
+            this.splitContainerControl1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControl)).EndInit();
+            this.layoutControl.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+        private CurveCompareMultiSelectMonitorPointTreeListCtrl multiSelectMonitorPointTreeListCtrl1;
+        private DevExpress.XtraCharts.ChartControl chartControl1;
+        private DevExpress.XtraBars.Commands.CommandBarGalleryDropDown commandBarGalleryDropDown1;
+        private DevExpress.XtraBars.Commands.CommandBarGalleryDropDown commandBarGalleryDropDown2;
+        private DevExpress.XtraBars.Commands.CommandBarGalleryDropDown commandBarGalleryDropDown3;
+        private DevExpress.XtraBars.Commands.CommandBarGalleryDropDown commandBarGalleryDropDown4;
+        private DevExpress.XtraBars.Commands.CommandBarGalleryDropDown commandBarGalleryDropDown5;
+        private DevExpress.XtraBars.Commands.CommandBarGalleryDropDown commandBarGalleryDropDown6;
+        private DevExpress.XtraBars.Commands.CommandBarGalleryDropDown commandBarGalleryDropDown7;
+        private DevExpress.XtraBars.Commands.CommandBarGalleryDropDown commandBarGalleryDropDown8;
+        private DevExpress.XtraEditors.SplitContainerControl splitContainerControl1;
+        private DevExpress.XtraLayout.LayoutControl layoutControl;
+        private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
+    }
+}
diff --git "a/WinFormUI/IStation.WinFormUI.MonitorDataSet/\346\233\262\347\272\277\346\257\224\350\276\203/CurveCompareChartMgr.cs" "b/WinFormUI/IStation.WinFormUI.MonitorDataSet/\346\233\262\347\272\277\346\257\224\350\276\203/CurveCompareChartMgr.cs"
new file mode 100644
index 0000000..aa0ad5f
--- /dev/null
+++ "b/WinFormUI/IStation.WinFormUI.MonitorDataSet/\346\233\262\347\272\277\346\257\224\350\276\203/CurveCompareChartMgr.cs"
@@ -0,0 +1,178 @@
+锘縰sing DevExpress.XtraCharts;
+using DevExpress.XtraEditors;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using IStation.Untity;
+using DevExpress.Utils;
+using System.Runtime;
+using DevExpress.XtraSplashScreen;
+
+namespace IStation.WinFormUI.MonitorDataSet
+{
+    public partial class CurveCompareChartMgr : DocumentPage
+    {
+        public CurveCompareChartMgr()
+        {
+            InitializeComponent();
+            this.multiSelectMonitorPointTreeListCtrl1.SelectedEvent += MultiSelectMonitorPointTreeListCtrl1_SelectedEvent;
+            this.multiSelectMonitorPointTreeListCtrl1.UncheckEvent += MultiSelectMonitorPointTreeListCtrl1_UncheckEvent;
+            this.PageTitle.Caption = "鏇茬嚎姣旇緝";
+        }
+        
+        #region 褰撳墠瑙嗗浘绫�
+        public class CurrentViewModel
+        {
+            public CurrentViewModel() { }
+            public CurrentViewModel(Model.SignalRecord rhs)
+            {
+                this.DataTime = rhs.Time;
+                this.DataValue = rhs.Value;
+            }
+
+            public DateTime DataTime { get; set; }
+            public double DataValue { get; set; }
+        }
+        #endregion
+          
+        private long _projectId;
+        private long _sceneId;
+        private Model.LogicTreeEx _logic;
+
+        private SwiftPlotDiagram _diagram
+        {
+            get { return this.chartControl1.Diagram as SwiftPlotDiagram; }
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栨暟鎹�
+        /// </summary>
+        public void InitialDataSource(long projectId,long sceneId, Model.LogicTreeEx logic)
+        {
+            _projectId = projectId;
+            _sceneId = sceneId;
+            SetBindingData(logic);
+        }
+
+        private void SetBindingData(Model.LogicTreeEx obj)
+        {
+            _logic = obj;
+            if (_logic == null)
+            { 
+                this.multiSelectMonitorPointTreeListCtrl1.SetBindingData();
+            }
+            else
+            {
+                this.multiSelectMonitorPointTreeListCtrl1.SetBindingData(_projectId, _logic.LogicType, _logic.LogicId);
+            }
+        }
+
+        private void MultiSelectMonitorPointTreeListCtrl1_SelectedEvent(Model.MonitorPointExSignalList obj, Color color)
+        {
+            var signal = obj.SignalList.First();
+            var lays = this.chartControl1.ShowOverlay();
+
+            var packet = new BLL.MonitorDataSet().QuerySignalRecordPacket(_projectId, _sceneId, obj.Id, signal.Id);
+            if (packet==null|| packet.RecordList==null)
+            {
+                XtraMessageBox.Show("鏃犳暟鎹�!");
+                lays.Close();
+                return;
+            } 
+            CreateSeries(signal, packet.RecordList);
+            lays.Close();
+        }
+
+        //娣诲姞绯诲垪
+        private void CreateSeries(Model.Signal signal, IEnumerable<Model.SignalRecord> records)
+        {
+            try
+            {
+                var count = this.chartControl1.Series.Where(x => Convert.ToInt64(x.Tag) == signal.Id).Count();
+                if (count > 0)
+                    return;
+                var unitValue = UnitValueHelper.Get(_projectId,signal);
+                var view = new SwiftPlotSeriesView();
+                view.AxisX = _diagram.AxisX;
+                if (this.chartControl1.Series.Count < 1)
+                {
+                    _diagram.AxisY.Title.Text = unitValue;
+                    view.AxisY = _diagram.AxisY;
+                }
+                else
+                {
+                    if (_diagram.AxisY.Title.Text == unitValue)
+                    {
+                        view.AxisY = _diagram.AxisY;
+                    }
+                    else
+                    {
+                        var axisy = _diagram.SecondaryAxesY.GetAxisByName(unitValue);
+                        if (axisy == null)
+                        {
+                            axisy = new SwiftPlotDiagramSecondaryAxisY();
+                            axisy.Name = unitValue;
+                            axisy.Alignment = AxisAlignment.Far;
+                            axisy.Title.Text = unitValue;
+                            axisy.Title.Alignment = StringAlignment.Far;
+                            axisy.Title.Visibility = DefaultBoolean.True;
+                            _diagram.SecondaryAxesY.Add(axisy);
+                        }
+                        view.AxisY = axisy;
+                    }
+                }
+                Series series = new Series();
+                series.Tag = signal.Id;
+                series.Name = signal.Name;
+                series.View = view;
+
+                var list = records.Select(x => new { Time = x.Time, Value = x.Value });
+                series.BindToData(list, "Time", "Value");
+                this.chartControl1.Series.Add(series);
+            }
+            catch (OutOfMemoryException)
+            {
+            }
+            finally
+            {
+                Gc();
+            }
+        }
+         
+        private void MultiSelectMonitorPointTreeListCtrl1_UncheckEvent(Model.MonitorPointExSignalList obj)
+        {
+            var signal = obj.SignalList.First();
+            var lays = this.chartControl1.ShowOverlay();
+            List<Series> seriesList = new List<Series>(this.chartControl1.Series.ToArray());
+            var index = seriesList.FindIndex(x => Convert.ToInt64(x.Tag) == signal.Id);
+            if (index != -1)
+            {
+                this.chartControl1.BeginInit();
+                var unitValue = UnitValueHelper.Get(_projectId, signal);
+                var axisy = _diagram.SecondaryAxesY.GetAxisByName(unitValue);
+                if (axisy != null)
+                {
+                    _diagram.SecondaryAxesY.Remove(axisy);
+                }
+                this.chartControl1.Series.RemoveAt(index);
+                this.chartControl1.EndInit();
+            }
+            Gc();
+            lays.Close();
+        }
+
+        private void Gc()
+        {
+            GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
+            GC.Collect(2, GCCollectionMode.Forced);
+            GC.WaitForFullGCComplete();
+        }
+         
+    }
+}
diff --git "a/WinFormUI/IStation.WinFormUI.MonitorDataSet/\346\233\262\347\272\277\346\257\224\350\276\203/CurveCompareChartMgr.resx" "b/WinFormUI/IStation.WinFormUI.MonitorDataSet/\346\233\262\347\272\277\346\257\224\350\276\203/CurveCompareChartMgr.resx"
new file mode 100644
index 0000000..c8a10a4
--- /dev/null
+++ "b/WinFormUI/IStation.WinFormUI.MonitorDataSet/\346\233\262\347\272\277\346\257\224\350\276\203/CurveCompareChartMgr.resx"
@@ -0,0 +1,242 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="createRotatedFullStackedBarChartItem1.Description" xml:space="preserve">
+    <value>Displays horizontal rectangles to compare the percentage each value contributes to a total across categories.
+
+Use it when the series point values contain durations or when the category text is long.</value>
+  </data>
+  <data name="createRotatedFullStackedBarChartItem1.Hint" xml:space="preserve">
+    <value>Displays horizontal rectangles to compare the percentage each value contributes to a total across categories.
+
+Use it when the series point values contain durations or when the category text is long.</value>
+  </data>
+  <data name="createArea3DChartItem1.Description" xml:space="preserve">
+    <value>Displays data as filled areas on a diagram, with each data point displayed as a peak or hollow in the area.
+
+Use it when you need to show trends for several series on the same diagram, and also show the relationship of the parts to the whole.</value>
+  </data>
+  <data name="createArea3DChartItem1.Hint" xml:space="preserve">
+    <value>Displays data as filled areas on a diagram, with each data point displayed as a peak or hollow in the area.
+
+Use it when you need to show trends for several series on the same diagram, and also show the relationship of the parts to the whole.</value>
+  </data>
+  <data name="createFullStackedArea3DChartItem1.Description" xml:space="preserve">
+    <value>Displays data as areas on a diagram, so that the value of each data point is stacked with all the other corresponding data points' values.
+
+Use it for comparing the percentage values of several series for the same point arguments.</value>
+  </data>
+  <data name="createFullStackedArea3DChartItem1.Hint" xml:space="preserve">
+    <value>Displays data as areas on a diagram, so that the value of each data point is stacked with all the other corresponding data points' values.
+
+Use it for comparing the percentage values of several series for the same point arguments.</value>
+  </data>
+  <data name="createFunnelChartItem1.Description" xml:space="preserve">
+    <value>Displays a wide area that indicates the total point value at the top. Other areas are proportionally smaller.
+
+Use it to display stages in a sales process, show the amount of potential revenue for each stage, or identify potential problem areas in an organization's sales processes.</value>
+  </data>
+  <data name="createFunnelChartItem1.Hint" xml:space="preserve">
+    <value>Displays a wide area that indicates the total point value at the top. Other areas are proportionally smaller.
+
+Use it to display stages in a sales process, show the amount of potential revenue for each stage, or identify potential problem areas in an organization's sales processes.</value>
+  </data>
+  <data name="createFunnel3DChartItem1.Description" xml:space="preserve">
+    <value>Displays a wide area at the top, indicating the total points' value, while other areas are proportionally smaller.
+
+Use it when it is necessary to represent stages in a sales process, show the amount of potential revenue for each stage, as well as identify potential problem areas in an organization's sales processes.</value>
+  </data>
+  <data name="createFunnel3DChartItem1.Hint" xml:space="preserve">
+    <value>Displays a wide area at the top, indicating the total points' value, while other areas are proportionally smaller.
+
+Use it when it is necessary to represent stages in a sales process, show the amount of potential revenue for each stage, as well as identify potential problem areas in an organization's sales processes.</value>
+  </data>
+  <data name="createStockChartItem1.Description" xml:space="preserve">
+    <value>Show variation in stock prices over the course of a day. The Open and Close prices are represented by left and right lines on each point, and the Low and High prices are represented by the bottom and top values of the vertical line which is shown at each point.</value>
+  </data>
+  <data name="createStockChartItem1.Hint" xml:space="preserve">
+    <value>Show variation in stock prices over the course of a day. The Open and Close prices are represented by left and right lines on each point, and the Low and High prices are represented by the bottom and top values of the vertical line which is shown at each point.</value>
+  </data>
+  <data name="createCandleStickChartItem1.Description" xml:space="preserve">
+    <value>Show the variation in the price of stock over the course of a day. The Open and Close prices are represented by a filled rectangle, and the Low and High prices are represented by the bottom and top values of the vertical line which is shown at each point.</value>
+  </data>
+  <data name="createCandleStickChartItem1.Hint" xml:space="preserve">
+    <value>Show the variation in the price of stock over the course of a day. The Open and Close prices are represented by a filled rectangle, and the Low and High prices are represented by the bottom and top values of the vertical line which is shown at each point.</value>
+  </data>
+  <data name="createRadarRangeAreaChartItem1.Description" xml:space="preserve">
+    <value>Displays series on a circular diagram on the basis of angles as filled areas, defined by data points with two values that are minimum and maximum limits. Use it when you need to accentuate the delta between the start and end values.</value>
+  </data>
+  <data name="createRadarRangeAreaChartItem1.Hint" xml:space="preserve">
+    <value>Displays series on a circular diagram on the basis of angles as filled areas, defined by data points with two values that are minimum and maximum limits. Use it when you need to accentuate the delta between the start and end values.</value>
+  </data>
+  <data name="createScatterRadarLineChartItem1.Description" xml:space="preserve">
+    <value>Displays data as a line on a circular grid that has multiple axis along which data can be plotted. The series points are drawn in the circular grid in the same order that they have in the series point collection.</value>
+  </data>
+  <data name="createScatterRadarLineChartItem1.Hint" xml:space="preserve">
+    <value>Displays data as a line on a circular grid that has multiple axis along which data can be plotted. The series points are drawn in the circular grid in the same order that they have in the series point collection.</value>
+  </data>
+  <data name="createPolarRangeAreaChartItem1.Description" xml:space="preserve">
+    <value>Displays series on a circular diagram as filled areas, defined by data points with two values that are minimum and maximum limits. Use it when you need to accentuate the delta between the start and end values.</value>
+  </data>
+  <data name="createPolarRangeAreaChartItem1.Hint" xml:space="preserve">
+    <value>Displays series on a circular diagram as filled areas, defined by data points with two values that are minimum and maximum limits. Use it when you need to accentuate the delta between the start and end values.</value>
+  </data>
+  <data name="createScatterPolarLineChartItem1.Description" xml:space="preserve">
+    <value>Show trends for several series and compare their values for the same point arguments on a circular diagram on the basis of angles. The series points are drawn in the circular grid in the same order that they have in the series point collection.</value>
+  </data>
+  <data name="createScatterPolarLineChartItem1.Hint" xml:space="preserve">
+    <value>Show trends for several series and compare their values for the same point arguments on a circular diagram on the basis of angles. The series points are drawn in the circular grid in the same order that they have in the series point collection.</value>
+  </data>
+  <data name="createRangeAreaChartItem1.Description" xml:space="preserve">
+    <value>Displays series as filled areas on a diagram, defined by data points with two values that are minimum and maximum limits.
+
+Use it when you need to accentuate the delta between the start and end values.</value>
+  </data>
+  <data name="createRangeAreaChartItem1.Hint" xml:space="preserve">
+    <value>Displays series as filled areas on a diagram, defined by data points with two values that are minimum and maximum limits.
+
+Use it when you need to accentuate the delta between the start and end values.</value>
+  </data>
+  <data name="createRangeArea3DChartItem1.Description" xml:space="preserve">
+    <value>Displays series as filled areas on a diagram, defined by data points with two values that are minimum and maximum limits.
+
+Use it when you need to accentuate the delta between the start and end values.</value>
+  </data>
+  <data name="createRangeArea3DChartItem1.Hint" xml:space="preserve">
+    <value>Displays series as filled areas on a diagram, defined by data points with two values that are minimum and maximum limits.
+
+Use it when you need to accentuate the delta between the start and end values.</value>
+  </data>
+  <data name="createSideBySideGanttChartItem1.Description" xml:space="preserve">
+    <value>Displays horizontal bars along the time axis. Each bar represents a separate event with the start and end values, hence these charts are used to track different activities during the time frame.
+
+Use it when it's necessary to show activity bars from different series one above another, to compare their duration.</value>
+  </data>
+  <data name="createSideBySideGanttChartItem1.Hint" xml:space="preserve">
+    <value>Displays horizontal bars along the time axis. Each bar represents a separate event with the start and end values, hence these charts are used to track different activities during the time frame.
+
+Use it when it's necessary to show activity bars from different series one above another, to compare their duration.</value>
+  </data>
+  <data name="createBoxPlotChartItem1.Description" xml:space="preserve">
+    <value>The Box Plot  chart is used to analyze statistic-driven data points. To draw a Box Plot point, pass the Min, Quartile1, Median, Quartile3, and Max parameters. You can also display a set of Outliers and a Mean value.</value>
+  </data>
+  <data name="createBoxPlotChartItem1.Hint" xml:space="preserve">
+    <value>The Box Plot  chart is used to analyze statistic-driven data points. To draw a Box Plot point, pass the Min, Quartile1, Median, Quartile3, and Max parameters. You can also display a set of Outliers and a Mean value.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git "a/WinFormUI/IStation.WinFormUI.MonitorDataSet/\346\233\262\347\272\277\346\257\224\350\276\203/CurveCompareMultiSelectMonitorPointTreeListCtrl.cs" "b/WinFormUI/IStation.WinFormUI.MonitorDataSet/\346\233\262\347\272\277\346\257\224\350\276\203/CurveCompareMultiSelectMonitorPointTreeListCtrl.cs"
new file mode 100644
index 0000000..b7f8642
--- /dev/null
+++ "b/WinFormUI/IStation.WinFormUI.MonitorDataSet/\346\233\262\347\272\277\346\257\224\350\276\203/CurveCompareMultiSelectMonitorPointTreeListCtrl.cs"
@@ -0,0 +1,290 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using DevExpress.XtraEditors;
+using DevExpress.Utils; 
+using DevExpress.XtraTreeList;
+using DevExpress.XtraTreeList.Nodes;
+using IStation.Untity;
+
+namespace IStation.WinFormUI.MonitorDataSet
+{
+    /// <summary>
+    /// 娴嬬偣鏍戝垪琛ㄦ帶浠�
+    /// </summary>
+    public partial class CurveCompareMultiSelectMonitorPointTreeListCtrl : XtraUserControl
+    {
+        public CurveCompareMultiSelectMonitorPointTreeListCtrl()
+        {
+            InitializeComponent();
+            this.treeList1.InitialDefaultSettings();
+            this.treeList1.SelectImageList = CurrentViewModel.Image16Store;
+            this.layoutControl1.SetupLayoutControl();
+        }
+
+        #region 褰撳墠瑙嗗浘
+
+        public class CurrentViewModel
+        {
+            public CurrentViewModel() { }
+            public CurrentViewModel(Model.MonitorPointGroup rhs)
+            {
+                this.ID = $"{IStation.ObjectType.MonitorPointGroup}_{rhs.Id}";
+                this.ParentID = $"{IStation.ObjectType.MonitorPointGroup}_{TreeParentIdsHelper.GetLastParentID(rhs.ParentIds)}";
+                this.Name = rhs.Name;
+                this.ObjectType = "鐩戞祴鐐圭粍";
+                this.ObjectID = rhs.Id;
+                this.SortCode = rhs.SortCode;
+                this.Description = rhs.Description;
+                this.Checked = false;
+                this.ImageIndex = 0;
+                this.Model = rhs;
+            }
+            public CurrentViewModel(Model.MonitorPointExSignalList rhs)
+            {
+                this.ID = $"{IStation.ObjectType.MonitorPoint}_{rhs.Id}";
+                this.ParentID = $"{IStation.ObjectType.MonitorPointGroup}_{rhs.GroupId}";
+                this.Name = rhs.Name;
+                this.ObjectType = "鐩戞祴鐐�";
+                this.ObjectID = rhs.Id;
+                this.SortCode = rhs.SortCode;
+                this.Description = rhs.Description;
+                this.Checked = false;
+                this.ImageIndex = 1;
+                this.Model = rhs;
+            }
+
+            public string ID { get; set; }
+            public string ParentID { get; set; }
+            public string Name { get; set; }
+            public string ObjectType { get; set; }
+            public long ObjectID { get; set; }
+            public int SortCode { get; set; }
+            public string Description { get; set; }
+            public bool? Checked { get; set; }
+            public int ImageIndex { get; set; }
+            public object Model { get; set; }
+            public Color? Color { get; set; }
+            /// <summary>
+            /// 鍥炬爣浠撳簱
+            /// </summary>
+            public static ImageCollection Image16Store
+            {
+                get
+                {
+                    if (_image16Store == null)
+                    {
+                        _image16Store = new ImageCollection();
+                        _image16Store.ImageSize = new Size(16, 16);
+                        _image16Store.Images.Add(WinFormUI.Properties.Resource.Group, "Group");
+                        _image16Store.Images.Add(WinFormUI.Properties.Resource.MonitorPoint, "MonitorPoint");
+                    }
+                    return _image16Store;
+                }
+            }
+            private static ImageCollection _image16Store;
+        }
+
+        #endregion
+
+        /// <summary>
+        /// check 鏀瑰彉鍚�
+        /// </summary>  
+        public event Action<Model.MonitorPointExSignalList,System.Drawing.Color> SelectedEvent;
+        /// <summary>
+        /// 
+        /// </summary>
+        public event Action<Model.MonitorPointExSignalList> UncheckEvent;
+
+        private long _projectId;//椤圭洰鏍囪瘑
+        private List<CurrentViewModel> _allBindingList = null;//鎵�鏈夌粦瀹氬垪琛�
+         
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData()
+        {
+            _projectId = 0; 
+            this.SetBindingData(null, null);
+        }
+
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(long projectId)
+        {
+            _projectId = projectId;
+            var group_list = new BLL.MonitorPointGroup().QueryAll(_projectId);
+            var point_list = new BLL.MonitorPoint().QueryExSignalList(_projectId);
+            this.SetBindingData(group_list, point_list);
+        }
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(long projectId, string belongType, long belongId)
+        {
+            _projectId = projectId;
+            var group_list = new BLL.MonitorPointGroup().QueryByBelongTypeAndBelongId(_projectId, belongType, belongId);
+            var point_list = new BLL.MonitorPoint().QueryExSignalListByBelongTypeAndBelongId(_projectId, belongType, belongId);
+            this.SetBindingData(group_list, point_list);
+        }
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(List<Model.MonitorPointGroup> group_list, List<Model.MonitorPointExSignalList> point_list)
+        {
+            _allBindingList = new List<CurrentViewModel>();
+            if (group_list != null && group_list.Count > 0)
+            {
+                group_list = group_list.OrderBy(x => x.SortCode).ToList();
+                group_list.ForEach(x => _allBindingList.Add(new CurrentViewModel(x)));
+            }
+            var group = new Model.MonitorPointGroup();
+            group.Id = -1;
+            group.Name = "鏈垎缁�";
+            group.SortCode = int.MaxValue;
+            group.Description = "铏氭嫙鍒嗙粍";
+            _allBindingList.Add(new CurrentViewModel(group));
+            if (point_list != null && point_list.Count > 0)
+            {
+                point_list = point_list.OrderBy(x => x.SortCode).ToList();
+                point_list.ForEach(x => _allBindingList.Add(new CurrentViewModel(x)));
+            }
+            this.treeList1.DataSource = _allBindingList;
+            this.treeList1.ForceInitialize();
+            this.treeList1.ExpandAll();
+        }
+
+        //鍏ㄩ儴灞曞紑
+        private void barBtnExpandAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            this.treeList1.ExpandAll();
+        }
+
+        //鍏ㄩ儴鎶樺彔
+        private void barBtnCollpseAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            this.treeList1.CollapseAll();
+        }
+
+        //妫�绱紙menu锛�
+        private void barBtnSearch_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            if (this.layoutControlItem1.Visibility == DevExpress.XtraLayout.Utils.LayoutVisibility.Always)
+                this.layoutControlItem1.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
+            else
+                this.layoutControlItem1.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
+        }
+
+        //鏍戠嚎
+        private void barCkTreeLine_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            this.treeList1.OptionsView.ShowTreeLines = this.barCkTreeLine.Checked ? DefaultBoolean.True : DefaultBoolean.False;
+        }
+
+        private List<Color> _colorArray = new List<Color>() { Color.Blue, Color.DarkCyan,Color.MediumTurquoise,Color.MediumSeaGreen, Color.GreenYellow
+        , Color.IndianRed,Color.Chocolate,Color.Orange,Color.Bisque,Color.SlateBlue,Color.Violet,Color.SkyBlue,Color.LightGreen};
+        //Check鏀瑰彉
+        private void treeList1_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)
+        {
+            if (_allBindingList == null)
+                return;
+            if (_allBindingList.Where(x => x.ObjectType != "鐩戞祴鐐圭粍" && x.Checked == true).Count() > 11)
+            {
+                XtraMessageBox.Show("鐩墠鏈�澶氭敮鎸佸崄涓睍绀�!");
+                return;
+            }
+            var node = this.treeList1.GetDataRecordByNode(e.Node) as CurrentViewModel;
+            if (node == null)
+                return;
+            if (node.ObjectType != "鐩戞祴鐐�")
+                return;
+            var monitorPoint = node.Model as Model.MonitorPointExSignalList;
+            if (monitorPoint == null)
+                return;
+            if (e.Node.Checked)
+            {
+                node.Color = QueryColor(); 
+                this.SelectedEvent?.Invoke(monitorPoint, node.Color.Value);
+            }
+            else
+            {
+                node.Color = null;
+                this.UncheckEvent?.Invoke(monitorPoint);
+            }
+        }
+
+        Color QueryColor()
+        {
+            foreach(var c in _colorArray)
+            {
+                var f = _allBindingList.Find(x => x.Color == c);
+                if (f == null)
+                    return c;
+            }
+            return Color.Black;
+        }
+
+        //闅愯棌鐖惰妭鐐瑰閫夋
+        private void treeList1_CustomDrawNodeCheckBox(object sender, DevExpress.XtraTreeList.CustomDrawNodeCheckBoxEventArgs e)
+        {
+            TreeList _curTree = (TreeList)sender;
+            HideCheckBox(n => (this.treeList1.GetDataRecordByNode(n) as CurrentViewModel)?.ObjectType == "鐩戞祴鐐圭粍", e);
+        }
+
+        /// <summary>
+         
+        public static void HideCheckBox(Predicate<TreeListNode> conditionHanlder, CustomDrawNodeCheckBoxEventArgs e)
+        {
+            if (conditionHanlder(e.Node))
+            {
+                e.Handled = true;
+            }
+        }
+        /// <summary>
+        /// /
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void barClearSelect_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            if (_allBindingList == null)
+                return;
+     
+
+            foreach (var item in _allBindingList)
+            {
+                if(item.Checked == true)
+                {
+                    item.Checked = false; 
+                    
+                    var monitorPoint = item.Model as Model.MonitorPointExSignalList;
+                    if (monitorPoint == null)
+                        continue;
+                    this.UncheckEvent?.Invoke(monitorPoint );
+                }
+            }
+            this.treeList1.DataSource = _allBindingList;
+            this.treeList1.RefreshDataSource();
+        }
+
+        private void treeList1_CustomDrawNodeCell(object sender, CustomDrawNodeCellEventArgs e)
+        {
+            var node = this.treeList1.GetDataRecordByNode(e.Node) as CurrentViewModel;
+            if (node == null)
+                return;
+            if (node.Color == null)
+                return;
+            e.Appearance.ForeColor = node.Color.Value;
+        }
+    }
+}
diff --git "a/WinFormUI/IStation.WinFormUI.MonitorDataSet/\346\233\262\347\272\277\346\257\224\350\276\203/CurveCompareMultiSelectMonitorPointTreeListCtrl.designer.cs" "b/WinFormUI/IStation.WinFormUI.MonitorDataSet/\346\233\262\347\272\277\346\257\224\350\276\203/CurveCompareMultiSelectMonitorPointTreeListCtrl.designer.cs"
new file mode 100644
index 0000000..a3a52a5
--- /dev/null
+++ "b/WinFormUI/IStation.WinFormUI.MonitorDataSet/\346\233\262\347\272\277\346\257\224\350\276\203/CurveCompareMultiSelectMonitorPointTreeListCtrl.designer.cs"
@@ -0,0 +1,327 @@
+锘縩amespace IStation.WinFormUI.MonitorDataSet
+{
+    partial class CurveCompareMultiSelectMonitorPointTreeListCtrl
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CurveCompareMultiSelectMonitorPointTreeListCtrl));
+            this.barManager1 = new DevExpress.XtraBars.BarManager(this.components);
+            this.bar1 = new DevExpress.XtraBars.Bar();
+            this.barBtnExpandAll = new DevExpress.XtraBars.BarButtonItem();
+            this.barBtnCollpseAll = new DevExpress.XtraBars.BarButtonItem();
+            this.barBtnSearchBox = new DevExpress.XtraBars.BarButtonItem();
+            this.barCkTreeLine = new DevExpress.XtraBars.BarCheckItem();
+            this.barClearSelect = new DevExpress.XtraBars.BarButtonItem();
+            this.barDockControlTop = new DevExpress.XtraBars.BarDockControl();
+            this.barDockControlBottom = new DevExpress.XtraBars.BarDockControl();
+            this.barDockControlLeft = new DevExpress.XtraBars.BarDockControl();
+            this.barDockControlRight = new DevExpress.XtraBars.BarDockControl();
+            this.barRoot = new DevExpress.XtraBars.BarSubItem();
+            this.layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            this.searchControl1 = new DevExpress.XtraEditors.SearchControl();
+            this.treeList1 = new DevExpress.XtraTreeList.TreeList();
+            this.colName = new DevExpress.XtraTreeList.Columns.TreeListColumn();
+            this.Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.barRootBasicInfoMgr = new DevExpress.XtraBars.BarSubItem();
+            ((System.ComponentModel.ISupportInitialize)(this.barManager1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).BeginInit();
+            this.layoutControl1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.searchControl1.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.treeList1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.Root)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // barManager1
+            // 
+            this.barManager1.Bars.AddRange(new DevExpress.XtraBars.Bar[] {
+            this.bar1});
+            this.barManager1.Categories.AddRange(new DevExpress.XtraBars.BarManagerCategory[] {
+            new DevExpress.XtraBars.BarManagerCategory("Menu", new System.Guid("66025f6c-663a-4ef4-927a-145971e982ee"))});
+            this.barManager1.DockControls.Add(this.barDockControlTop);
+            this.barManager1.DockControls.Add(this.barDockControlBottom);
+            this.barManager1.DockControls.Add(this.barDockControlLeft);
+            this.barManager1.DockControls.Add(this.barDockControlRight);
+            this.barManager1.Form = this;
+            this.barManager1.Items.AddRange(new DevExpress.XtraBars.BarItem[] {
+            this.barBtnExpandAll,
+            this.barBtnCollpseAll,
+            this.barBtnSearchBox,
+            this.barCkTreeLine,
+            this.barClearSelect});
+            this.barManager1.MaxItemId = 37;
+            // 
+            // bar1
+            // 
+            this.bar1.BarName = "Custom 2";
+            this.bar1.CanDockStyle = DevExpress.XtraBars.BarCanDockStyle.Top;
+            this.bar1.DockCol = 0;
+            this.bar1.DockRow = 0;
+            this.bar1.DockStyle = DevExpress.XtraBars.BarDockStyle.Top;
+            this.bar1.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] {
+            new DevExpress.XtraBars.LinkPersistInfo(this.barBtnExpandAll),
+            new DevExpress.XtraBars.LinkPersistInfo(this.barBtnCollpseAll),
+            new DevExpress.XtraBars.LinkPersistInfo(this.barBtnSearchBox),
+            new DevExpress.XtraBars.LinkPersistInfo(this.barCkTreeLine),
+            new DevExpress.XtraBars.LinkPersistInfo(this.barClearSelect)});
+            this.bar1.OptionsBar.AllowQuickCustomization = false;
+            this.bar1.OptionsBar.DrawDragBorder = false;
+            this.bar1.OptionsBar.MultiLine = true;
+            this.bar1.OptionsBar.UseWholeRow = true;
+            this.bar1.Text = "Custom 2";
+            // 
+            // barBtnExpandAll
+            // 
+            this.barBtnExpandAll.Caption = "鍏ㄩ儴灞曞紑";
+            this.barBtnExpandAll.CategoryGuid = new System.Guid("66025f6c-663a-4ef4-927a-145971e982ee");
+            this.barBtnExpandAll.Id = 8;
+            this.barBtnExpandAll.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("barBtnExpandAll.ImageOptions.SvgImage")));
+            this.barBtnExpandAll.Name = "barBtnExpandAll";
+            this.barBtnExpandAll.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.barBtnExpandAll_ItemClick);
+            // 
+            // barBtnCollpseAll
+            // 
+            this.barBtnCollpseAll.Caption = "鍏ㄩ儴鎶樺彔";
+            this.barBtnCollpseAll.CategoryGuid = new System.Guid("66025f6c-663a-4ef4-927a-145971e982ee");
+            this.barBtnCollpseAll.Id = 9;
+            this.barBtnCollpseAll.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("barBtnCollpseAll.ImageOptions.SvgImage")));
+            this.barBtnCollpseAll.Name = "barBtnCollpseAll";
+            this.barBtnCollpseAll.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.barBtnCollpseAll_ItemClick);
+            // 
+            // barBtnSearchBox
+            // 
+            this.barBtnSearchBox.Caption = "鎼滅储妗�";
+            this.barBtnSearchBox.CategoryGuid = new System.Guid("66025f6c-663a-4ef4-927a-145971e982ee");
+            this.barBtnSearchBox.Id = 10;
+            this.barBtnSearchBox.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("barBtnSearchBox.ImageOptions.SvgImage")));
+            this.barBtnSearchBox.Name = "barBtnSearchBox";
+            this.barBtnSearchBox.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.barBtnSearch_ItemClick);
+            // 
+            // barCkTreeLine
+            // 
+            this.barCkTreeLine.Caption = "鏍戠嚎";
+            this.barCkTreeLine.CategoryGuid = new System.Guid("66025f6c-663a-4ef4-927a-145971e982ee");
+            this.barCkTreeLine.Id = 13;
+            this.barCkTreeLine.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("barCkTreeLine.ImageOptions.SvgImage")));
+            this.barCkTreeLine.Name = "barCkTreeLine";
+            this.barCkTreeLine.CheckedChanged += new DevExpress.XtraBars.ItemClickEventHandler(this.barCkTreeLine_CheckedChanged);
+            // 
+            // barClearSelect
+            // 
+            this.barClearSelect.Caption = "娓呯悊鎵�鏈�";
+            this.barClearSelect.Id = 36;
+            this.barClearSelect.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("barClearSelect.ImageOptions.Image")));
+            this.barClearSelect.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("barClearSelect.ImageOptions.LargeImage")));
+            this.barClearSelect.Name = "barClearSelect";
+            this.barClearSelect.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.barClearSelect_ItemClick);
+            // 
+            // barDockControlTop
+            // 
+            this.barDockControlTop.CausesValidation = false;
+            this.barDockControlTop.Dock = System.Windows.Forms.DockStyle.Top;
+            this.barDockControlTop.Location = new System.Drawing.Point(0, 0);
+            this.barDockControlTop.Manager = this.barManager1;
+            this.barDockControlTop.Size = new System.Drawing.Size(239, 24);
+            // 
+            // barDockControlBottom
+            // 
+            this.barDockControlBottom.CausesValidation = false;
+            this.barDockControlBottom.Dock = System.Windows.Forms.DockStyle.Bottom;
+            this.barDockControlBottom.Location = new System.Drawing.Point(0, 569);
+            this.barDockControlBottom.Manager = this.barManager1;
+            this.barDockControlBottom.Size = new System.Drawing.Size(239, 0);
+            // 
+            // barDockControlLeft
+            // 
+            this.barDockControlLeft.CausesValidation = false;
+            this.barDockControlLeft.Dock = System.Windows.Forms.DockStyle.Left;
+            this.barDockControlLeft.Location = new System.Drawing.Point(0, 24);
+            this.barDockControlLeft.Manager = this.barManager1;
+            this.barDockControlLeft.Size = new System.Drawing.Size(0, 545);
+            // 
+            // barDockControlRight
+            // 
+            this.barDockControlRight.CausesValidation = false;
+            this.barDockControlRight.Dock = System.Windows.Forms.DockStyle.Right;
+            this.barDockControlRight.Location = new System.Drawing.Point(239, 24);
+            this.barDockControlRight.Manager = this.barManager1;
+            this.barDockControlRight.Size = new System.Drawing.Size(0, 545);
+            // 
+            // barRoot
+            // 
+            this.barRoot.Caption = "barSubItem1";
+            this.barRoot.Id = 17;
+            this.barRoot.Name = "barRoot";
+            // 
+            // layoutControl1
+            // 
+            this.layoutControl1.Controls.Add(this.searchControl1);
+            this.layoutControl1.Controls.Add(this.treeList1);
+            this.layoutControl1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.layoutControl1.Location = new System.Drawing.Point(0, 24);
+            this.layoutControl1.Name = "layoutControl1";
+            this.layoutControl1.Root = this.Root;
+            this.layoutControl1.Size = new System.Drawing.Size(239, 545);
+            this.layoutControl1.TabIndex = 6;
+            this.layoutControl1.Text = "layoutControl1";
+            // 
+            // searchControl1
+            // 
+            this.searchControl1.Client = this.treeList1;
+            this.searchControl1.Location = new System.Drawing.Point(0, 2);
+            this.searchControl1.Name = "searchControl1";
+            this.searchControl1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Repository.ClearButton(),
+            new DevExpress.XtraEditors.Repository.SearchButton()});
+            this.searchControl1.Properties.Client = this.treeList1;
+            this.searchControl1.Properties.FilterCondition = DevExpress.Data.Filtering.FilterCondition.Contains;
+            this.searchControl1.Size = new System.Drawing.Size(239, 20);
+            this.searchControl1.StyleController = this.layoutControl1;
+            this.searchControl1.TabIndex = 8;
+            // 
+            // treeList1
+            // 
+            this.treeList1.CheckBoxFieldName = "Checked";
+            this.treeList1.Columns.AddRange(new DevExpress.XtraTreeList.Columns.TreeListColumn[] {
+            this.colName});
+            this.treeList1.Location = new System.Drawing.Point(0, 24);
+            this.treeList1.Name = "treeList1";
+            this.treeList1.OptionsBehavior.AllowExpandAnimation = DevExpress.Utils.DefaultBoolean.True;
+            this.treeList1.OptionsBehavior.AllowRecursiveNodeChecking = true;
+            this.treeList1.OptionsBehavior.Editable = false;
+            this.treeList1.OptionsBehavior.ReadOnly = true;
+            this.treeList1.OptionsMenu.EnableNodeMenu = false;
+            this.treeList1.OptionsSelection.EnableAppearanceFocusedCell = false;
+            this.treeList1.OptionsView.CheckBoxStyle = DevExpress.XtraTreeList.DefaultNodeCheckBoxStyle.Check;
+            this.treeList1.OptionsView.FocusRectStyle = DevExpress.XtraTreeList.DrawFocusRectStyle.None;
+            this.treeList1.Size = new System.Drawing.Size(239, 519);
+            this.treeList1.TabIndex = 7;
+            this.treeList1.ViewStyle = DevExpress.XtraTreeList.TreeListViewStyle.TreeView;
+            this.treeList1.AfterCheckNode += new DevExpress.XtraTreeList.NodeEventHandler(this.treeList1_AfterCheckNode);
+            this.treeList1.CustomDrawNodeCell += new DevExpress.XtraTreeList.CustomDrawNodeCellEventHandler(this.treeList1_CustomDrawNodeCell);
+            // 
+            // colName
+            // 
+            this.colName.Caption = "鍚嶇О";
+            this.colName.FieldName = "Name";
+            this.colName.MinWidth = 23;
+            this.colName.Name = "colName";
+            this.colName.Visible = true;
+            this.colName.VisibleIndex = 0;
+            this.colName.Width = 87;
+            // 
+            // Root
+            // 
+            this.Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+            this.Root.GroupBordersVisible = false;
+            this.Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
+            this.layoutControlItem1,
+            this.layoutControlItem2});
+            this.Root.Name = "Root";
+            this.Root.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            this.Root.Size = new System.Drawing.Size(239, 545);
+            this.Root.TextVisible = false;
+            // 
+            // layoutControlItem1
+            // 
+            this.layoutControlItem1.Control = this.searchControl1;
+            this.layoutControlItem1.Location = new System.Drawing.Point(0, 0);
+            this.layoutControlItem1.Name = "layoutControlItem1";
+            this.layoutControlItem1.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 2, 1);
+            this.layoutControlItem1.Size = new System.Drawing.Size(239, 23);
+            this.layoutControlItem1.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem1.TextVisible = false;
+            // 
+            // layoutControlItem2
+            // 
+            this.layoutControlItem2.Control = this.treeList1;
+            this.layoutControlItem2.Location = new System.Drawing.Point(0, 23);
+            this.layoutControlItem2.Name = "layoutControlItem2";
+            this.layoutControlItem2.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 1, 2);
+            this.layoutControlItem2.Size = new System.Drawing.Size(239, 522);
+            this.layoutControlItem2.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem2.TextVisible = false;
+            // 
+            // barRootBasicInfoMgr
+            // 
+            this.barRootBasicInfoMgr.Caption = "barSubItem1";
+            this.barRootBasicInfoMgr.Id = 20;
+            this.barRootBasicInfoMgr.Name = "barRootBasicInfoMgr";
+            // 
+            // CurveCompareMultiSelectMonitorPointTreeListCtrl
+            // 
+            this.Appearance.BackColor = System.Drawing.SystemColors.Control;
+            this.Appearance.Options.UseBackColor = true;
+            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.layoutControl1);
+            this.Controls.Add(this.barDockControlLeft);
+            this.Controls.Add(this.barDockControlRight);
+            this.Controls.Add(this.barDockControlBottom);
+            this.Controls.Add(this.barDockControlTop);
+            this.Name = "CurveCompareMultiSelectMonitorPointTreeListCtrl";
+            this.Size = new System.Drawing.Size(239, 569);
+            ((System.ComponentModel.ISupportInitialize)(this.barManager1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).EndInit();
+            this.layoutControl1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.searchControl1.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.treeList1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.Root)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+        private DevExpress.XtraBars.BarManager barManager1;
+        private DevExpress.XtraBars.BarDockControl barDockControlTop;
+        private DevExpress.XtraBars.BarDockControl barDockControlBottom;
+        private DevExpress.XtraBars.BarDockControl barDockControlLeft;
+        private DevExpress.XtraBars.BarDockControl barDockControlRight;
+        private DevExpress.XtraBars.Bar bar1;
+        private DevExpress.XtraBars.BarButtonItem barBtnExpandAll;
+        private DevExpress.XtraBars.BarButtonItem barBtnCollpseAll;
+        private DevExpress.XtraBars.BarButtonItem barBtnSearchBox;
+        private DevExpress.XtraBars.BarCheckItem barCkTreeLine;
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private DevExpress.XtraEditors.SearchControl searchControl1;
+        private DevExpress.XtraTreeList.TreeList treeList1;
+        private DevExpress.XtraTreeList.Columns.TreeListColumn colName;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+        private DevExpress.XtraBars.BarSubItem barRoot;
+        private DevExpress.XtraBars.BarSubItem barRootBasicInfoMgr;
+        private DevExpress.XtraBars.BarButtonItem barClearSelect;
+    }
+}
diff --git "a/WinFormUI/IStation.WinFormUI.MonitorDataSet/\346\233\262\347\272\277\346\257\224\350\276\203/CurveCompareMultiSelectMonitorPointTreeListCtrl.resx" "b/WinFormUI/IStation.WinFormUI.MonitorDataSet/\346\233\262\347\272\277\346\257\224\350\276\203/CurveCompareMultiSelectMonitorPointTreeListCtrl.resx"
new file mode 100644
index 0000000..68c1ae8
--- /dev/null
+++ "b/WinFormUI/IStation.WinFormUI.MonitorDataSet/\346\233\262\347\272\277\346\257\224\350\276\203/CurveCompareMultiSelectMonitorPointTreeListCtrl.resx"
@@ -0,0 +1,234 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="barManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>29, 18</value>
+  </metadata>
+  <assembly alias="DevExpress.Data.v21.2" name="DevExpress.Data.v21.2, Version=21.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
+  <data name="barBtnExpandAll.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi42
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALACAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iRXhwYW5kX0ZpZWxkIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3
+        IDAgMCAzMiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkuQmxhY2t7ZmlsbDojNzI3Mjcy
+        O30KCS5HcmVlbntmaWxsOiMwMzlDMjM7fQoJLnN0MHtvcGFjaXR5OjAuNzU7fQo8L3N0eWxlPg0KICA8
+        cG9seWdvbiBwb2ludHM9IjE0LDYgMTAsNiAxMCwyIDYsMiA2LDYgMiw2IDIsMTAgNiwxMCA2LDE0IDEw
+        LDE0IDEwLDEwIDE0LDEwICIgY2xhc3M9IkdyZWVuIiAvPg0KICA8ZyBjbGFzcz0ic3QwIj4NCiAgICA8
+        cGF0aCBkPSJNMjIsNmgxMHYySDIyVjZ6IE0yMiwxMmgxMHYtMkgyMlYxMnogTTIyLDIwaDEwdi0ySDIy
+        VjIweiBNMjIsMjRoMTB2LTJIMjJWMjR6IiBjbGFzcz0iQmxhY2siIC8+DQogIDwvZz4NCiAgPHBhdGgg
+        ZD0iTTE4LDJoMTR2MkgxOFYyeiBNMTgsMTZoMTR2LTJIMThWMTZ6IE0xOCwyOGgxNHYtMkgxOFYyOHoi
+        IGNsYXNzPSJCbGFjayIgLz4NCjwvc3ZnPgs=
+</value>
+  </data>
+  <data name="barBtnCollpseAll.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi42
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAIcCAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iQ29sbGFwc2VfRmllbGQiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpu
+        ZXcgMCAwIDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbGFja3tmaWxsOiM3Mjcy
+        NzI7fQoJLlJlZHtmaWxsOiNEMTFDMUM7fQoJLnN0MHtvcGFjaXR5OjAuNzU7fQo8L3N0eWxlPg0KICA8
+        cmVjdCB4PSIyIiB5PSI2IiB3aWR0aD0iMTIiIGhlaWdodD0iNCIgY2xhc3M9IlJlZCIgLz4NCiAgPGcg
+        Y2xhc3M9InN0MCI+DQogICAgPHBhdGggZD0iTTIyLDZoMTB2MkgyMlY2eiBNMjIsMTJoMTB2LTJIMjJW
+        MTJ6IE0yMiwyMGgxMHYtMkgyMlYyMHogTTIyLDI0aDEwdi0ySDIyVjI0eiIgY2xhc3M9IkJsYWNrIiAv
+        Pg0KICA8L2c+DQogIDxwYXRoIGQ9Ik0xOCwyaDE0djJIMThWMnogTTE4LDE2aDE0di0ySDE4VjE2eiBN
+        MTgsMjhoMTR2LTJIMThWMjh6IiBjbGFzcz0iQmxhY2siIC8+DQo8L3N2Zz4L
+</value>
+  </data>
+  <data name="barBtnSearchBox.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi42
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAANoCAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5Z
+        ZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJLkdyZWVue2ZpbGw6IzAz
+        OUMyMzt9CgkuUmVke2ZpbGw6I0QxMUMxQzt9Cgkuc3Qwe29wYWNpdHk6MC43NTt9Cgkuc3Qxe29wYWNp
+        dHk6MC41O30KPC9zdHlsZT4NCiAgPGcgaWQ9Ilpvb20iPg0KICAgIDxwYXRoIGQ9Ik0yNy43LDI1LjNM
+        MjAuNSwxOGMxLTEuNCwxLjUtMy4yLDEuNS01YzAtNS00LTktOS05cy05LDQtOSw5YzAsNSw0LDksOSw5
+        YzEuOSwwLDMuNi0wLjYsNS0xLjVsNy4zLDcuMyAgIGMwLjMsMC4zLDAuOSwwLjMsMS4yLDBsMS4yLTEu
+        MkMyOC4xLDI2LjIsMjguMSwyNS42LDI3LjcsMjUuM3ogTTYsMTNjMC0zLjksMy4xLTcsNy03czcsMy4x
+        LDcsN2MwLDMuOS0zLjEsNy03LDdTNiwxNi45LDYsMTN6IiBjbGFzcz0iQmxhY2siIC8+DQogIDwvZz4N
+        Cjwvc3ZnPgs=
+</value>
+  </data>
+  <data name="barCkTreeLine.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi42
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAIkDAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkdyZWVue2ZpbGw6IzAzOUMyMzt9Cgku
+        QmxhY2t7ZmlsbDojNzI3MjcyO30KCS5SZWR7ZmlsbDojRDExQzFDO30KCS5ZZWxsb3d7ZmlsbDojRkZC
+        MTE1O30KCS5CbHVle2ZpbGw6IzExNzdENzt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
+        Y2l0eTowLjU7fQoJLnN0MXtvcGFjaXR5OjAuNzU7fQo8L3N0eWxlPg0KICA8ZyBpZD0iSW5zZXJ0VHJl
+        ZVZpZXciPg0KICAgIDxwYXRoIGQ9Ik0xMyw4SDVDNC40LDgsNCw3LjYsNCw3VjNjMC0wLjUsMC40LTEs
+        MS0xaDhjMC42LDAsMSwwLjUsMSwxdjRDMTQsNy42LDEzLjYsOCwxMyw4eiBNMjYsMTd2LTQgICBjMC0w
+        LjYtMC41LTEtMS0xaC04Yy0wLjUsMC0xLDAuNC0xLDF2NGMwLDAuNSwwLjUsMSwxLDFoOEMyNS41LDE4
+        LDI2LDE3LjUsMjYsMTd6IE0yNiwyN3YtNGMwLTAuNS0wLjUtMS0xLTFoLThjLTAuNSwwLTEsMC41LTEs
+        MSAgIHY0YzAsMC41LDAuNSwxLDEsMWg4QzI1LjUsMjgsMjYsMjcuNSwyNiwyN3oiIGNsYXNzPSJZZWxs
+        b3ciIC8+DQogICAgPHBvbHlnb24gcG9pbnRzPSIxNCwxNiAxNCwxNCAxMCwxNCAxMCwxMCA4LDEwIDgs
+        MjYgMTQsMjYgMTQsMjQgMTAsMjQgMTAsMTYgICIgY2xhc3M9IkJsYWNrIiAvPg0KICA8L2c+DQo8L3N2
+        Zz4L
+</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="barClearSelect.ImageOptions.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+        dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAWdEVYdFRpdGxlAExhYmVscztDaGFydDtQaWV0oy20
+        AAAA9klEQVQ4T42RPQrCQBCFF+wt/ek8TTpP4QFEBQ8QFmySVm1ttLSwsVdIIZ5EkEAOML5ZHJlMNsHi
+        g+zy3je7G7c+7UpQgBwkgPcCRBTw3gtk4SApKpCB4Wx7jBZE+hU3BMwF5f40vY4RCJN1Qb5lbQVcHqD8
+        AJkIFI0TaYEuE6hAoifGEIEtC3mspGFBW5kpdDh6hY4yU9qiFTqENqakCQJdsGuX7g8jBM+mKIQrICjU
+        js+412317JCER0QwoKfLvnvfl9Qi+e83sqBFktmwHFvzExjJHExiAruuCUAFyQKSHgTRiTFBCQqQgwTw
+        w/Lf4YDFCD19ALyghmw0HifIAAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="barClearSelect.ImageOptions.LargeImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+        dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAWdEVYdFRpdGxlAExhYmVscztDaGFydDtQaWV0oy20
+        AAAChUlEQVRYR8WWu2sUURTGB/+ArSws1MrCxsLGQrGwSqFOISFbxiJWJhB2JUTEIuuyDIKJFiKsoE1A
+        85CFuMpUuhBRgp2NjWywsPAtgoJEc/3OMGc53j135o67YvHjLnfPfL9vHvsIjDH/FXVzUOr1uvGBZoOZ
+        Oze6IAYRCEEJ0L53kAaXccEzJDIWHTAJdsoDfEEwF+fXfaRzWPQCTAuMiNAiDKUA8aKy2NxtB2TB4fza
+        Bc3QmlVgC/JTo9H94ydr8bg8OI9hFPgJeRnyE5D/AC9Bcjt8GLTAL8jHIR9J5SalBbweTA7PwlVgG/KJ
+        0WjtGGTfhJyZlCEu0iuQC83KAiSfgvwIRJqc6ICSlGkg3Aua7RWoLjYrkB+C4IsQaoS2cBCSApBfgPwg
+        wj9bMo1IC5Lg7NRLbkOzAeRzkB9A8DtL5CKWMg0Oz6JXAPL9CH1rSbLoyiCN9AyT+6zBM7QGCNy0BHl8
+        Z5ELCpdCG56hlQpcswR5JAUoIIe+YhKaoTU4c+XeHoT6PHxMcgtIkIF/gaftSxfDWnxOEblIHkIh0/Av
+        8OlJ5WujeXsvgruWyIXXx9Des5EFzOaj89fHGu2yItPI/SJKr0AuNJsUAFtLd6/Sx/GZJbMZ/ldxWsC8
+        X6+2zs6vHIZgWwhtfH+MvKDZXgFi40HtKB7IVUVMFPo59oFm/ygANi7fvLUPIvk/gCj8h8Tes3EVMK8f
+        z46VG+15IX8DTsuD80jPMLnMGjxDa18B8Gp1aWEXpB8BnXkhOUHhUmjDM7RqBcyH9er01MJyCLn3ZZdQ
+        OItcZBXogInnD+d2yAOKULRAF8QgAiEoAdrnoL9FFTM0Q6v65qBweBb/vIAPxpjgN1d6cbVfZ85GAAAA
+        AElFTkSuQmCC
+</value>
+  </data>
+</root>
\ No newline at end of file
diff --git "a/WinFormUI/IStation.WinFormUI.MonitorDataSet/\346\233\262\347\272\277\346\257\224\350\276\203/UnitValueHelper.cs" "b/WinFormUI/IStation.WinFormUI.MonitorDataSet/\346\233\262\347\272\277\346\257\224\350\276\203/UnitValueHelper.cs"
new file mode 100644
index 0000000..10d2a40
--- /dev/null
+++ "b/WinFormUI/IStation.WinFormUI.MonitorDataSet/\346\233\262\347\272\277\346\257\224\350\276\203/UnitValueHelper.cs"
@@ -0,0 +1,38 @@
+锘縰sing IStation.Unit;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.WinFormUI.MonitorDataSet
+{
+    public class UnitValueHelper
+    { 
+
+        private static List<Model. SignalType> _allSignalTypeList;
+
+        public static string Get(long projectId,Model.Signal signal)
+        {
+            if (signal == null)
+                return "鏈煡";
+            var value = signal.Name;
+            if (!string.IsNullOrEmpty(signal.UnitValue))
+            {
+                if (int.TryParse(signal.UnitValue, out int unitValue))
+                {
+                    if (_allSignalTypeList == null || _allSignalTypeList.Count < 1)
+                        _allSignalTypeList = new BLL. SignalType().QueryAll(projectId);
+                    var type = _allSignalTypeList?.Find(x => x.Identifier == signal.SignalType);
+                    if (type != null)
+                    {
+                        var dict = UnitHelper.GetEnUnitDict(type.UnitType);
+                        if (dict != null)
+                            value = dict[unitValue];
+                    }
+                }
+            }
+            return value;
+        }
+    }
+}

--
Gitblit v1.9.3