lg
17 小时以前 cabb7ecdde336baec10b5ca4e0bd09d443b2023b
Merge branch 'master' of http://43.142.96.171:8080/r/~tjx/GsMesClient
已修改2个文件
已添加9个文件
2036 ■■■■■ 文件已修改
DevApp/Gs.DevApp/DevFrm/Sys/DefectCodeKanban.Designer.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DevApp/Gs.DevApp/DevFrm/Sys/DefectCodeKanban.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DevApp/Gs.DevApp/DevFrm/Sys/DefectCodeKanban.resx 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DevApp/Gs.DevApp/DevFrm/Sys/SimpleKanBan.Designer.cs 362 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DevApp/Gs.DevApp/DevFrm/Sys/SimpleKanBan.cs 382 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DevApp/Gs.DevApp/DevFrm/Sys/SimpleKanBan.resx 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DevApp/Gs.DevApp/DevFrm/Sys/SimpleKanBanEdit.Designer.cs 415 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DevApp/Gs.DevApp/DevFrm/Sys/SimpleKanBanEdit.cs 352 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DevApp/Gs.DevApp/DevFrm/Sys/SimpleKanBanEdit.resx 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DevApp/Gs.DevApp/Gs.DevApp.csproj 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DevApp/Gs.DevApp/UserControl/SelectHz.Designer.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DevApp/Gs.DevApp/DevFrm/Sys/DefectCodeKanban.Designer.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
namespace Gs.DevApp.DevFrm.Sys
{
    partial class DefectCodeKanBan
    {
        /// <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.simpleKanBan1 = new Gs.DevApp.DevFrm.Sys.SimpleKanBan();
            this.SuspendLayout();
            //
            // simpleKanBan1
            //
            this.simpleKanBan1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.simpleKanBan1.Location = new System.Drawing.Point(0, 0);
            this.simpleKanBan1.Name = "simpleKanBan1";
            this.simpleKanBan1.Size = new System.Drawing.Size(1001, 568);
            this.simpleKanBan1.TabIndex = 0;
            //
            // DefectCodeKanBan
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 18F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(1001, 568);
            this.Controls.Add(this.simpleKanBan1);
            this.Name = "DefectCodeKanBan";
            this.Text = "看板目录管理";
            this.ResumeLayout(false);
        }
        #endregion
        private SimpleKanBan simpleKanBan1;
    }
}
DevApp/Gs.DevApp/DevFrm/Sys/DefectCodeKanban.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
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;
namespace Gs.DevApp.DevFrm.Sys
{
    /// <summary>
    /// çœ‹æ¿ç›®å½•管理 - ä¸»çª—体
    /// </summary>
    public partial class DefectCodeKanBan : DevExpress.XtraEditors.XtraForm
    {
        public DefectCodeKanBan()
        {
            InitializeComponent();
        }
    }
}
DevApp/Gs.DevApp/DevFrm/Sys/DefectCodeKanban.resx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,123 @@
<?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="cms1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>17, 17</value>
  </metadata>
</root>
DevApp/Gs.DevApp/DevFrm/Sys/SimpleKanBan.Designer.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,362 @@

namespace Gs.DevApp.DevFrm.Sys
{
    partial class SimpleKanBan
    {
        /// <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();
            this.toolStripMenuItemRoot = new System.Windows.Forms.ToolStripMenuItem();
            this.toolStripMenuItemEdt = new System.Windows.Forms.ToolStripMenuItem();
            this.toolStripMenuItemAdd = new System.Windows.Forms.ToolStripMenuItem();
            this.cms1 = new System.Windows.Forms.ContextMenuStrip(this.components);
            this.toolStripMenuItemDel = new System.Windows.Forms.ToolStripMenuItem();
            this.colId = new DevExpress.XtraTreeList.Columns.TreeListColumn();
            this.colParentId = new DevExpress.XtraTreeList.Columns.TreeListColumn();
            this.colCode = new DevExpress.XtraTreeList.Columns.TreeListColumn();
            this.colTitle = new DevExpress.XtraTreeList.Columns.TreeListColumn();
            this.colNodeType = new DevExpress.XtraTreeList.Columns.TreeListColumn();
            this.colUrl = new DevExpress.XtraTreeList.Columns.TreeListColumn();
            this.colIsEnabled = new DevExpress.XtraTreeList.Columns.TreeListColumn();
            this.colIsExpanded = new DevExpress.XtraTreeList.Columns.TreeListColumn();
            this.colSortOrder = new DevExpress.XtraTreeList.Columns.TreeListColumn();
            this.colCreatedBy = new DevExpress.XtraTreeList.Columns.TreeListColumn();
            this.colCreatedAt = new DevExpress.XtraTreeList.Columns.TreeListColumn();
            this.split1 = new DevExpress.XtraEditors.SplitContainerControl();
            this.tlMenu = new DevExpress.XtraTreeList.TreeList();
            this.xtraTabPage1 = new DevExpress.XtraTab.XtraTabPage();
            this.xtraTabControl1 = new DevExpress.XtraTab.XtraTabControl();
            this.toolBarMenu1 = new Gs.DevApp.UserControl.UcToolBarMenu();
            this.treeListColumn1 = new DevExpress.XtraTreeList.Columns.TreeListColumn();
            this.cms1.SuspendLayout();
            ((System.ComponentModel.ISupportInitialize)(this.split1)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.split1.Panel1)).BeginInit();
            this.split1.Panel1.SuspendLayout();
            ((System.ComponentModel.ISupportInitialize)(this.split1.Panel2)).BeginInit();
            this.split1.SuspendLayout();
            ((System.ComponentModel.ISupportInitialize)(this.tlMenu)).BeginInit();
            this.xtraTabPage1.SuspendLayout();
            ((System.ComponentModel.ISupportInitialize)(this.xtraTabControl1)).BeginInit();
            this.xtraTabControl1.SuspendLayout();
            this.SuspendLayout();
            //
            // toolStripMenuItemRoot
            //
            this.toolStripMenuItemRoot.Image = global::Gs.DevApp.Properties.Resources.trackingchanges_allmarkup_16x16;
            this.toolStripMenuItemRoot.Name = "toolStripMenuItemRoot";
            this.toolStripMenuItemRoot.Size = new System.Drawing.Size(156, 30);
            this.toolStripMenuItemRoot.Text = "增加主项";
            //
            // toolStripMenuItemEdt
            //
            this.toolStripMenuItemEdt.Image = global::Gs.DevApp.Properties.Resources.trackingchanges_trackchanges_16x16;
            this.toolStripMenuItemEdt.Name = "toolStripMenuItemEdt";
            this.toolStripMenuItemEdt.Size = new System.Drawing.Size(156, 30);
            this.toolStripMenuItemEdt.Text = "编辑该项";
            //
            // toolStripMenuItemAdd
            //
            this.toolStripMenuItemAdd.Image = global::Gs.DevApp.Properties.Resources.trackingchanges_allmarkup_16x16;
            this.toolStripMenuItemAdd.Name = "toolStripMenuItemAdd";
            this.toolStripMenuItemAdd.Size = new System.Drawing.Size(156, 30);
            this.toolStripMenuItemAdd.Text = "增加子项";
            //
            // cms1
            //
            this.cms1.ImageScalingSize = new System.Drawing.Size(20, 20);
            this.cms1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
            this.toolStripMenuItemAdd,
            this.toolStripMenuItemEdt,
            this.toolStripMenuItemDel,
            this.toolStripMenuItemRoot});
            this.cms1.Name = "contextMenuStrip1";
            this.cms1.Size = new System.Drawing.Size(157, 124);
            //
            // toolStripMenuItemDel
            //
            this.toolStripMenuItemDel.Image = global::Gs.DevApp.Properties.Resources.deletelist2_16x16;
            this.toolStripMenuItemDel.Name = "toolStripMenuItemDel";
            this.toolStripMenuItemDel.Size = new System.Drawing.Size(156, 30);
            this.toolStripMenuItemDel.Text = "删除该项";
            //
            // colId
            //
            this.colId.Caption = "ID";
            this.colId.FieldName = "id";
            this.colId.MinWidth = 25;
            this.colId.Name = "colId";
            this.colId.Width = 94;
            //
            // colParentId
            //
            this.colParentId.Caption = "父ID";
            this.colParentId.FieldName = "parentId";
            this.colParentId.MinWidth = 25;
            this.colParentId.Name = "colParentId";
            this.colParentId.Width = 94;
            //
            // colCode
            //
            this.colCode.Caption = "编码";
            this.colCode.FieldName = "code";
            this.colCode.MinWidth = 29;
            this.colCode.Name = "colCode";
            this.colCode.Visible = true;
            this.colCode.VisibleIndex = 0;
            this.colCode.Width = 150;
            //
            // colTitle
            //
            this.colTitle.Caption = "名称";
            this.colTitle.FieldName = "title";
            this.colTitle.MinWidth = 47;
            this.colTitle.Name = "colTitle";
            this.colTitle.Visible = true;
            this.colTitle.VisibleIndex = 1;
            this.colTitle.Width = 250;
            //
            // colNodeType
            //
            this.colNodeType.Caption = "节点类型";
            this.colNodeType.FieldName = "nodeTypeTxt";
            this.colNodeType.MinWidth = 29;
            this.colNodeType.Name = "colNodeType";
            this.colNodeType.Visible = true;
            this.colNodeType.VisibleIndex = 2;
            this.colNodeType.Width = 100;
            //
            // colUrl
            //
            this.colUrl.Caption = "URL地址";
            this.colUrl.FieldName = "url";
            this.colUrl.MinWidth = 29;
            this.colUrl.Name = "colUrl";
            this.colUrl.Visible = true;
            this.colUrl.VisibleIndex = 3;
            this.colUrl.Width = 250;
            //
            // colIsEnabled
            //
            this.colIsEnabled.Caption = "启用";
            this.colIsEnabled.FieldName = "isEnabledTxt";
            this.colIsEnabled.MinWidth = 29;
            this.colIsEnabled.Name = "colIsEnabled";
            this.colIsEnabled.Visible = true;
            this.colIsEnabled.VisibleIndex = 5;
            //
            // colIsExpanded
            //
            this.colIsExpanded.Caption = "是否展开";
            this.colIsExpanded.FieldName = "isExpandedTxt";
            this.colIsExpanded.MinWidth = 29;
            this.colIsExpanded.Name = "colIsExpanded";
            this.colIsExpanded.Visible = true;
            this.colIsExpanded.VisibleIndex = 6;
            this.colIsExpanded.Width = 100;
            //
            // colSortOrder
            //
            this.colSortOrder.Caption = "排序号";
            this.colSortOrder.FieldName = "sortOrder";
            this.colSortOrder.MinWidth = 29;
            this.colSortOrder.Name = "colSortOrder";
            this.colSortOrder.Visible = true;
            this.colSortOrder.VisibleIndex = 7;
            this.colSortOrder.Width = 100;
            //
            // colCreatedBy
            //
            this.colCreatedBy.Caption = "创建人";
            this.colCreatedBy.FieldName = "createdBy";
            this.colCreatedBy.MinWidth = 29;
            this.colCreatedBy.Name = "colCreatedBy";
            this.colCreatedBy.Visible = true;
            this.colCreatedBy.VisibleIndex = 8;
            this.colCreatedBy.Width = 125;
            //
            // colCreatedAt
            //
            this.colCreatedAt.Caption = "创建时间";
            this.colCreatedAt.FieldName = "createdAt";
            this.colCreatedAt.MinWidth = 29;
            this.colCreatedAt.Name = "colCreatedAt";
            this.colCreatedAt.Visible = true;
            this.colCreatedAt.VisibleIndex = 9;
            this.colCreatedAt.Width = 187;
            //
            // split1
            //
            this.split1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.split1.FixedPanel = DevExpress.XtraEditors.SplitFixedPanel.Panel2;
            this.split1.Horizontal = false;
            this.split1.Location = new System.Drawing.Point(0, 0);
            this.split1.Margin = new System.Windows.Forms.Padding(4);
            this.split1.Name = "split1";
            //
            // split1.Panel1
            //
            this.split1.Panel1.Controls.Add(this.tlMenu);
            this.split1.Panel1.Text = "Panel1";
            //
            // split1.Panel2
            //
            this.split1.Panel2.Text = "Panel2";
            this.split1.ShowSplitGlyph = DevExpress.Utils.DefaultBoolean.True;
            this.split1.Size = new System.Drawing.Size(1236, 831);
            this.split1.SplitterPosition = 0;
            this.split1.TabIndex = 0;
            //
            // tlMenu
            //
            this.tlMenu.Appearance.Row.Options.UseFont = true;
            this.tlMenu.Columns.AddRange(new DevExpress.XtraTreeList.Columns.TreeListColumn[] {
            this.colId,
            this.colParentId,
            this.colCode,
            this.colTitle,
            this.colNodeType,
            this.colUrl,
            this.colIsEnabled,
            this.colIsExpanded,
            this.colSortOrder,
            this.colCreatedBy,
            this.colCreatedAt,
            this.treeListColumn1});
            this.tlMenu.Cursor = System.Windows.Forms.Cursors.Default;
            this.tlMenu.Dock = System.Windows.Forms.DockStyle.Fill;
            this.tlMenu.HorzScrollStep = 4;
            this.tlMenu.Location = new System.Drawing.Point(0, 0);
            this.tlMenu.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
            this.tlMenu.MinWidth = 29;
            this.tlMenu.Name = "tlMenu";
            this.tlMenu.OptionsBehavior.Editable = false;
            this.tlMenu.OptionsFind.AlwaysVisible = true;
            this.tlMenu.OptionsMenu.EnableColumnMenu = false;
            this.tlMenu.OptionsMenu.EnableFooterMenu = false;
            this.tlMenu.OptionsMenu.EnableNodeMenu = false;
            this.tlMenu.OptionsMenu.ShowAddNodeItems = DevExpress.Utils.DefaultBoolean.False;
            this.tlMenu.OptionsMenu.ShowAutoFilterRowItem = false;
            this.tlMenu.OptionsView.ShowTreeLines = DevExpress.Utils.DefaultBoolean.True;
            this.tlMenu.OptionsView.TreeLineStyle = DevExpress.XtraTreeList.LineStyle.Solid;
            this.tlMenu.Size = new System.Drawing.Size(1236, 816);
            this.tlMenu.TabIndex = 3;
            this.tlMenu.TreeLevelWidth = 31;
            //
            // xtraTabPage1
            //
            this.xtraTabPage1.Controls.Add(this.split1);
            this.xtraTabPage1.Margin = new System.Windows.Forms.Padding(4);
            this.xtraTabPage1.Name = "xtraTabPage1";
            this.xtraTabPage1.Size = new System.Drawing.Size(1236, 831);
            this.xtraTabPage1.Text = "数据列表";
            //
            // xtraTabControl1
            //
            this.xtraTabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.xtraTabControl1.Location = new System.Drawing.Point(0, 98);
            this.xtraTabControl1.Margin = new System.Windows.Forms.Padding(4);
            this.xtraTabControl1.Name = "xtraTabControl1";
            this.xtraTabControl1.SelectedTabPage = this.xtraTabPage1;
            this.xtraTabControl1.Size = new System.Drawing.Size(1238, 869);
            this.xtraTabControl1.TabIndex = 5;
            this.xtraTabControl1.TabPages.AddRange(new DevExpress.XtraTab.XtraTabPage[] {
            this.xtraTabPage1});
            //
            // toolBarMenu1
            //
            this.toolBarMenu1.chkParameter = null;
            this.toolBarMenu1.currentAction = null;
            this.toolBarMenu1.defaultActions = null;
            this.toolBarMenu1.Dock = System.Windows.Forms.DockStyle.Top;
            this.toolBarMenu1.guidKey = null;
            this.toolBarMenu1.isSetBtn = false;
            this.toolBarMenu1.Location = new System.Drawing.Point(0, 0);
            this.toolBarMenu1.Margin = new System.Windows.Forms.Padding(5, 4, 5, 4);
            this.toolBarMenu1.Name = "toolBarMenu1";
            this.toolBarMenu1.rptParameter = null;
            this.toolBarMenu1.Size = new System.Drawing.Size(1238, 98);
            this.toolBarMenu1.TabIndex = 4;
            this.toolBarMenu1.xlsInService = null;
            this.toolBarMenu1.xlsOutParameter = null;
            //
            // treeListColumn1
            //
            this.treeListColumn1.Caption = "轮播时长";
            this.treeListColumn1.FieldName = "carouselDuration";
            this.treeListColumn1.Name = "treeListColumn1";
            this.treeListColumn1.Visible = true;
            this.treeListColumn1.VisibleIndex = 4;
            //
            // SimpleKanBan
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 22F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.Controls.Add(this.xtraTabControl1);
            this.Controls.Add(this.toolBarMenu1);
            this.Margin = new System.Windows.Forms.Padding(4);
            this.Name = "SimpleKanBan";
            this.Size = new System.Drawing.Size(1238, 967);
            this.cms1.ResumeLayout(false);
            ((System.ComponentModel.ISupportInitialize)(this.split1.Panel1)).EndInit();
            this.split1.Panel1.ResumeLayout(false);
            ((System.ComponentModel.ISupportInitialize)(this.split1.Panel2)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.split1)).EndInit();
            this.split1.ResumeLayout(false);
            ((System.ComponentModel.ISupportInitialize)(this.tlMenu)).EndInit();
            this.xtraTabPage1.ResumeLayout(false);
            ((System.ComponentModel.ISupportInitialize)(this.xtraTabControl1)).EndInit();
            this.xtraTabControl1.ResumeLayout(false);
            this.ResumeLayout(false);
        }
        #endregion
        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemRoot;
        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemEdt;
        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemAdd;
        private System.Windows.Forms.ContextMenuStrip cms1;
        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemDel;
        private DevExpress.XtraTreeList.Columns.TreeListColumn colId;
        private DevExpress.XtraTreeList.Columns.TreeListColumn colParentId;
        private DevExpress.XtraTreeList.Columns.TreeListColumn colCode;
        private DevExpress.XtraTreeList.Columns.TreeListColumn colTitle;
        private DevExpress.XtraTreeList.Columns.TreeListColumn colNodeType;
        private DevExpress.XtraTreeList.Columns.TreeListColumn colUrl;
        private DevExpress.XtraTreeList.Columns.TreeListColumn colIsEnabled;
        private DevExpress.XtraTreeList.Columns.TreeListColumn colIsExpanded;
        private DevExpress.XtraTreeList.Columns.TreeListColumn colSortOrder;
        private DevExpress.XtraTreeList.Columns.TreeListColumn colCreatedBy;
        private DevExpress.XtraTreeList.Columns.TreeListColumn colCreatedAt;
        private DevExpress.XtraEditors.SplitContainerControl split1;
        private DevExpress.XtraTreeList.TreeList tlMenu;
        private DevExpress.XtraTab.XtraTabPage xtraTabPage1;
        private DevExpress.XtraTab.XtraTabControl xtraTabControl1;
        private UserControl.UcToolBarMenu toolBarMenu1;
        private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn1;
    }
}
DevApp/Gs.DevApp/DevFrm/Sys/SimpleKanBan.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,382 @@
using DevExpress.Data;
using DevExpress.XtraTreeList;
using DevExpress.XtraTreeList.Nodes;
using Gs.DevApp.Entity;
using Gs.DevApp.ToolBox;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
namespace Gs.DevApp.DevFrm.Sys
{
    /// <summary>
    /// çœ‹æ¿ç›®å½•管理 - æ ‘形结构维护界面(用户控件)
    /// </summary>
    public partial class SimpleKanBan : DevExpress.XtraEditors.XtraUserControl
    {
        private string _webServiceName = "MesSimpleManager/";
        public SimpleKanBan()
        {
            InitializeComponent();
            // å·¥å…·æ äº‹ä»¶ç»‘定
            toolBarMenu1.btnLoadClick += ToolBarMenu1_btnLoadClick;
            toolBarMenu1.btnQueryClick += ToolBarMenu1_btnQueryClick;
            // TreeList è¡Œå·æ˜¾ç¤º
            tlMenu.IndicatorWidth = 50;
            tlMenu.CustomDrawNodeIndicator += (s, ee) =>
            {
                if (ee.IsNodeIndicator)
                {
                    var index = ee.Node.TreeList.GetVisibleIndexByNode(ee.Node);
                    ee.Info.DisplayText = (index + 1).ToString();
                }
            };
            // åˆå§‹åŒ–加载数据
            getPageList();
            // å³é”®èœå•事件
            tlMenu.MouseDown += TlMenu_MouseDown;
            // å¢žåР子项
            toolStripMenuItemAdd.Click += (s, ee) =>
            {
                string strGuid = "";
                string strUpGuid = "";
                if (tlMenu.FocusedNode != null)
                {
                    strUpGuid = tlMenu.FocusedNode.GetValue("id").ToString();
                }
                SimpleKanBanEdit frm = new SimpleKanBanEdit(strGuid, strUpGuid);
                frm.UpdateParent += (s2, ee2) =>
                {
                    getPageList();
                    TreeListNode node = tlMenu.FindNodeByKeyID(long.Parse(strUpGuid));
                    if (node != null)
                    {
                        node.Expanded = true;
                        tlMenu.MakeNodeVisible(node);
                    }
                };
                frm.ShowDialog();
            };
            // å¢žåŠ ä¸»é¡¹ï¼ˆæ ¹èŠ‚ç‚¹ï¼‰
            toolStripMenuItemRoot.Click += (s, ee) =>
            {
                string strGuid = "";
                string strUpGuid = "";
                SimpleKanBanEdit frm = new SimpleKanBanEdit(strGuid, strUpGuid);
                frm.UpdateParent += (s2, ee2) =>
                {
                    getPageList();
                };
                frm.ShowDialog();
            };
            // åˆ é™¤èŠ‚ç‚¹
            toolStripMenuItemDel.Click += (s, ee) =>
            {
                if (tlMenu.FocusedNode != null)
                {
                    string rowGuid = "";
                    string rowName = "";
                    rowGuid = tlMenu.FocusedNode.GetValue("id").ToString();
                    rowName = tlMenu.FocusedNode.GetValue("title").ToString();
                    if (string.IsNullOrEmpty(rowGuid))
                    {
                        MsgHelper.Warning("请先选择你要操作的行!");
                        return;
                    }
                    if (!MsgHelper.AskQuestion("你选择了【" + rowName + "】,确定删除吗?"))
                        return;
                    List<dynamic> lst = new List<dynamic>();
                    lst.Add(rowGuid);
                    try
                    {
                        string strJson = UtilityHelper.HttpPost("", _webServiceName + "DeleteModel", JsonConvert.SerializeObject(lst));
                        ReturnModel<dynamic> _rtn = UtilityHelper.ReturnToDynamic(strJson);
                        if (_rtn.rtnCode > 0)
                        {
                            tlMenu.DeleteNode(tlMenu.FocusedNode);
                        }
                        else
                            MsgHelper.ShowError("提示:" + _rtn.rtnMsg);
                    }
                    catch (Exception ex)
                    {
                        MsgHelper.ShowError("提示:" + ex.Message);
                    }
                }
            };
            // åˆ›å»ºåˆ·æ–°èœå•项
            ToolStripMenuItem toolStripMenuItemRefresh = new ToolStripMenuItem();
            toolStripMenuItemRefresh.Text = "刷新";
            toolStripMenuItemRefresh.Click += ToolBarMenu1_btnLoadClick; // ç›´æŽ¥è°ƒç”¨å·²æœ‰åˆ·æ–°äº‹ä»¶
            // æ·»åŠ åˆ°å³é”®èœå•ï¼Œä¸æ¸…ç©ºåŽŸæœ‰ Items
            cms1.Items.Add(toolStripMenuItemRefresh);
            // ç¼–辑节点
            toolStripMenuItemEdt.Click += (s, ee) =>
            {
                string strGuid = "";
                string strUpGuid = "";
                if (tlMenu.FocusedNode != null)
                {
                    strGuid = tlMenu.FocusedNode.GetValue("id").ToString();
                    var fidValue = tlMenu.FocusedNode.GetValue("parentId");
                    strUpGuid = fidValue != null ? fidValue.ToString() : "";
                }
                SimpleKanBanEdit frm = new SimpleKanBanEdit(strGuid, strUpGuid);
                frm.UpdateParent += (s2, ee2) =>
                {
                    getPageList();
                    TreeListNode node = tlMenu.FindNodeByKeyID(long.Parse(strGuid));
                    if (node != null)
                    {
                        node.Expanded = true;
                        tlMenu.MakeNodeVisible(node);
                    }
                };
                frm.ShowDialog();
            };
        }
        /// <summary>
        /// æŸ¥è¯¢äº‹ä»¶
        /// </summary>
        private void ToolBarMenu1_btnQueryClick(object sender, EventArgs e)
        {
            MsgHelper.ShowInformation("该窗体不支持查询,若想更新页面,请点击 åˆ·æ–°");
        }
        /// <summary>
        /// åˆ·æ–°äº‹ä»¶
        /// </summary>
        private void ToolBarMenu1_btnLoadClick(object sender, EventArgs e)
        {
            getPageList();
            MsgHelper.ShowInformation("刷新成功!");
        }
        /// <summary>
        /// å³é”®å¼¹å‡ºèœå•
        /// </summary>
        private void TlMenu_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                TreeListHitInfo hInfo = tlMenu.CalcHitInfo(new Point(e.X, e.Y));
                TreeListNode node = hInfo.Node;
                tlMenu.FocusedNode = node;
                if (hInfo.HitInfoType == HitInfoType.Cell ||
                    hInfo.HitInfoType == HitInfoType.Row ||
                    hInfo.HitInfoType == HitInfoType.RowIndent ||
                    hInfo.HitInfoType == HitInfoType.RowIndicator)
                {
                    if (node != null)
                    {
                        toolStripMenuItemAdd.Visible = true;
                        toolStripMenuItemEdt.Visible = true;
                        toolStripMenuItemDel.Visible = true;
                        toolStripMenuItemRoot.Visible = false;
                        cms1.Show(tlMenu, e.Location);
                    }
                }
                else
                {
                    toolStripMenuItemAdd.Visible = false;
                    toolStripMenuItemEdt.Visible = false;
                    toolStripMenuItemDel.Visible = false;
                    toolStripMenuItemRoot.Visible = true;
                    cms1.Show(tlMenu, e.Location);
                }
            }
        }
        /// <summary>
        /// åŠ è½½æ•°æ®åˆ—è¡¨ - æ ‘形结构显示
        /// </summary>
        private void getPageList()
        {
            var pgq = new PageQueryModel(1, 999999, "a.node_level", "asc", "", "");//sort_order
            var json = JsonConvert.SerializeObject(pgq);
            try
            {
                var strReturn = UtilityHelper.HttpPost("", _webServiceName + "GetListPage", json);
                var dd = UtilityHelper.ReturnToTablePage(strReturn);
                var dt = dd.rtnData.list; // èŽ·å–åŽŸå§‹ DataTable
                // â˜…★★ ç±»åž‹ä¿®å¤ä»£ç å¼€å§‹ (插入在这里) â˜…★★
                // æ£€æµ‹ parentId æ˜¯å¦å­˜åœ¨ä¸”类型不对
                if (dt.Columns.Contains("parentId") && dt.Columns["parentId"].DataType != typeof(long))
                {
                    // 1. åˆ›å»ºä¸€ä¸ªæ–°çš„ Int64 ç±»åž‹çš„临时列
                    DataColumn newCol = new DataColumn("parentId_Fixed", typeof(long));
                    dt.Columns.Add(newCol);
                    // 2. éåŽ†æ‰€æœ‰è¡Œï¼ŒæŠŠ String è½¬æˆ Long
                    foreach (DataRow row in dt.Rows)
                    {
                        object oldVal = row["parentId"];
                        // åªæœ‰éžç©ºå€¼æ‰è½¬æ¢ï¼Œç©ºå€¼ä¿æŒ DBNull (即根节点)
                        if (oldVal != null && oldVal != DBNull.Value && !string.IsNullOrEmpty(oldVal.ToString()))
                        {
                            if (long.TryParse(oldVal.ToString(), out long val))
                            {
                                row["parentId_Fixed"] = val;
                            }
                        }
                    }
                    // 3. ç§»é™¤æ—§çš„ String åˆ—
                    dt.Columns.Remove("parentId");
                    // 4. æŠŠæ–°åˆ—改名为 parentId
                    newCol.ColumnName = "parentId";
                }
                // â˜…★★ ç±»åž‹ä¿®å¤ä»£ç ç»“束 â˜…★★
                tlMenu.BeginUpdate();
                // 1. ç»‘定处理过的数据
                tlMenu.DataSource = dt;
                // 2. ç»‘定字段 (现在类型完全一致了)
                tlMenu.KeyFieldName = "id";
                tlMenu.ParentFieldName = "parentId";
             //  è®¾ç½®æ ¹èŠ‚ç‚¹ (Int64 ç±»åž‹çš„列,空值就是 DBNull)
                tlMenu.RootValue = DBNull.Value;
                string sortColName = "sortOrder";
                if (tlMenu.Columns[sortColName] != null)
                {
                    tlMenu.ClearSorting();
                    tlMenu.Columns[sortColName].SortOrder = System.Windows.Forms.SortOrder.Ascending;
                    tlMenu.Columns[sortColName].SortIndex = 0;
                }
                tlMenu.ForceInitialize();
                // 4. è°ƒç”¨å±•开逻辑
                ApplyExpandState();
                tlMenu.EndUpdate();
                tlMenu.BestFitColumns();
            }
            catch (Exception ex)
            {
                tlMenu.EndUpdate();
                MsgHelper.Warning("加载失败:" + ex.Message);
            }
        }
        /// <summary>
        /// æ ¹æ® isExpanded (bool) å­—段设置节点展开
        /// </summary>
        private void ApplyExpandState()
        {
            // 1. å…ˆå…¨éƒ¨æŠ˜å 
            tlMenu.CollapseAll();
            // 2. ä½¿ç”¨ DevExpress é«˜æ•ˆè¿­ä»£å™¨éåކ
            tlMenu.NodesIterator.DoOperation(node =>
            {
                // èŽ·å–å€¼ (注意:列名必须与 DataTable ä¸­ä¸€è‡´ï¼Œé€šå¸¸æ˜¯ "isExpanded")
                object val = node.GetValue("isExpanded");
                // 3. åˆ¤æ–­å¹¶å±•å¼€
                if (val != null && val != DBNull.Value)
                {
                    if ((bool)val)
                    {
                        node.Expanded = true;
                    }
                }
            });
        }
        /// <summary>
        /// å°†åŠ¨æ€æ•°æ®è½¬æ¢ä¸ºDataTable
        /// </summary>
        private DataTable ConvertToDataTable(dynamic sourceData)
        {
            DataTable dt = new DataTable();
            if (sourceData == null) return dt;
            // å¦‚果已经是DataTable,直接返回
            if (sourceData is DataTable)
                return sourceData as DataTable;
            // å°è¯•从JSON数组转换
            string jsonStr = JsonConvert.SerializeObject(sourceData);
            dt = JsonConvert.DeserializeObject<DataTable>(jsonStr);
            return dt;
        }
        /// <summary>
        /// å¤„理parentId字段,确保树形结构正确构建
        /// æ ¹èŠ‚ç‚¹ï¼ˆnode_level=0 æˆ– parentId为null/0)的parentId设为DBNull
        /// </summary>
        private void ProcessParentIdForTreeStructure(DataTable dt)
        {
            if (dt == null || dt.Rows.Count == 0) return;
            foreach (DataRow row in dt.Rows)
            {
                // èŽ·å–nodeLevel
                int nodeLevel = 0;
                if (dt.Columns.Contains("nodeLevel") && row["nodeLevel"] != DBNull.Value)
                {
                    nodeLevel = Convert.ToInt32(row["nodeLevel"]);
                }
                // èŽ·å–parentId
                object parentIdValue = null;
                if (dt.Columns.Contains("parentId"))
                {
                    parentIdValue = row["parentId"];
                }
                // å¦‚果是根节点(nodeLevel=0 æˆ– parentId为null/0/空),将parentId设为DBNull
                bool isRootNode = nodeLevel == 0;
                bool hasNoParent = parentIdValue == null ||
                                   parentIdValue == DBNull.Value ||
                                   string.IsNullOrEmpty(parentIdValue.ToString()) ||
                                   parentIdValue.ToString() == "0";
                if (isRootNode || hasNoParent)
                {
                    row["parentId"] = DBNull.Value;
                }
            }
        }
        /// <summary>
        /// å±•开第一级节点(根节点)
        /// </summary>
        private void ExpandFirstLevelNodes()
        {
            foreach (TreeListNode node in tlMenu.Nodes)
            {
                node.Expanded = true;
            }
        }
    }
}
DevApp/Gs.DevApp/DevFrm/Sys/SimpleKanBan.resx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,123 @@
<?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="cms1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>17, 17</value>
  </metadata>
</root>
DevApp/Gs.DevApp/DevFrm/Sys/SimpleKanBanEdit.Designer.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,415 @@
namespace Gs.DevApp.DevFrm.Sys
{
    partial class SimpleKanBanEdit
    {
        /// <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.layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
            this.txtCode = new DevExpress.XtraEditors.TextEdit();
            this.txtTitle = new DevExpress.XtraEditors.TextEdit();
            this.rgNodeType = new DevExpress.XtraEditors.RadioGroup();
            this.txtUrl = new DevExpress.XtraEditors.TextEdit();
            this.seCarouselDuration = new DevExpress.XtraEditors.SpinEdit();
            this.seSortOrder = new DevExpress.XtraEditors.SpinEdit();
            this.chkIsExpanded = new DevExpress.XtraEditors.CheckEdit();
            this.chkIsEnabled = new DevExpress.XtraEditors.CheckEdit();
            this.btnSave = new DevExpress.XtraEditors.SimpleButton();
            this.btnCancel = new DevExpress.XtraEditors.SimpleButton();
            this.layoutControlGroup1 = new DevExpress.XtraLayout.LayoutControlGroup();
            this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
            this.layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
            this.layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
            this.layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
            this.layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem();
            this.layoutControlItem6 = new DevExpress.XtraLayout.LayoutControlItem();
            this.layoutControlItem7 = new DevExpress.XtraLayout.LayoutControlItem();
            this.layoutControlItem8 = new DevExpress.XtraLayout.LayoutControlItem();
            this.emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem();
            this.layoutControlItem9 = new DevExpress.XtraLayout.LayoutControlItem();
            this.layoutControlItem10 = new DevExpress.XtraLayout.LayoutControlItem();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).BeginInit();
            this.layoutControl1.SuspendLayout();
            ((System.ComponentModel.ISupportInitialize)(this.txtCode.Properties)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.txtTitle.Properties)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.rgNodeType.Properties)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.txtUrl.Properties)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.seCarouselDuration.Properties)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.seSortOrder.Properties)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.chkIsExpanded.Properties)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.chkIsEnabled.Properties)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup1)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem3)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem4)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem6)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem7)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem8)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem1)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem9)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem10)).BeginInit();
            this.SuspendLayout();
            //
            // layoutControl1
            //
            this.layoutControl1.Controls.Add(this.txtCode);
            this.layoutControl1.Controls.Add(this.txtTitle);
            this.layoutControl1.Controls.Add(this.rgNodeType);
            this.layoutControl1.Controls.Add(this.txtUrl);
            this.layoutControl1.Controls.Add(this.seCarouselDuration);
            this.layoutControl1.Controls.Add(this.seSortOrder);
            this.layoutControl1.Controls.Add(this.chkIsExpanded);
            this.layoutControl1.Controls.Add(this.chkIsEnabled);
            this.layoutControl1.Controls.Add(this.btnSave);
            this.layoutControl1.Controls.Add(this.btnCancel);
            this.layoutControl1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.layoutControl1.Location = new System.Drawing.Point(0, 0);
            this.layoutControl1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
            this.layoutControl1.Name = "layoutControl1";
            this.layoutControl1.Root = this.layoutControlGroup1;
            this.layoutControl1.Size = new System.Drawing.Size(562, 464);
            this.layoutControl1.TabIndex = 0;
            this.layoutControl1.Text = "layoutControl1";
            //
            // txtCode
            //
            this.txtCode.Location = new System.Drawing.Point(151, 14);
            this.txtCode.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
            this.txtCode.Name = "txtCode";
            this.txtCode.Properties.MaxLength = 50;
            this.txtCode.Size = new System.Drawing.Size(397, 28);
            this.txtCode.StyleController = this.layoutControl1;
            this.txtCode.TabIndex = 4;
            //
            // txtTitle
            //
            this.txtTitle.Location = new System.Drawing.Point(151, 46);
            this.txtTitle.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
            this.txtTitle.Name = "txtTitle";
            this.txtTitle.Properties.MaxLength = 255;
            this.txtTitle.Size = new System.Drawing.Size(397, 28);
            this.txtTitle.StyleController = this.layoutControl1;
            this.txtTitle.TabIndex = 5;
            //
            // rgNodeType
            //
            this.rgNodeType.Location = new System.Drawing.Point(151, 78);
            this.rgNodeType.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
            this.rgNodeType.Name = "rgNodeType";
            this.rgNodeType.Properties.Items.AddRange(new DevExpress.XtraEditors.Controls.RadioGroupItem[] {
            new DevExpress.XtraEditors.Controls.RadioGroupItem(0, "根目录"),
            new DevExpress.XtraEditors.Controls.RadioGroupItem(1, "看板目录"),
            new DevExpress.XtraEditors.Controls.RadioGroupItem(2, "看板内容")});
            this.rgNodeType.Size = new System.Drawing.Size(397, 49);
            this.rgNodeType.StyleController = this.layoutControl1;
            this.rgNodeType.TabIndex = 6;
            //
            // txtUrl
            //
            this.txtUrl.Location = new System.Drawing.Point(151, 131);
            this.txtUrl.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
            this.txtUrl.Name = "txtUrl";
            this.txtUrl.Properties.MaxLength = 500;
            this.txtUrl.Size = new System.Drawing.Size(397, 28);
            this.txtUrl.StyleController = this.layoutControl1;
            this.txtUrl.TabIndex = 7;
            //
            // seCarouselDuration
            //
            this.seCarouselDuration.EditValue = new decimal(new int[] {
            10,
            0,
            0,
            0});
            this.seCarouselDuration.Location = new System.Drawing.Point(151, 163);
            this.seCarouselDuration.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
            this.seCarouselDuration.Name = "seCarouselDuration";
            this.seCarouselDuration.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
            this.seCarouselDuration.Properties.MaxValue = new decimal(new int[] {
            3600,
            0,
            0,
            0});
            this.seCarouselDuration.Properties.MinValue = new decimal(new int[] {
            1,
            0,
            0,
            0});
            this.seCarouselDuration.Size = new System.Drawing.Size(397, 28);
            this.seCarouselDuration.StyleController = this.layoutControl1;
            this.seCarouselDuration.TabIndex = 8;
            //
            // seSortOrder
            //
            this.seSortOrder.EditValue = new decimal(new int[] {
            0,
            0,
            0,
            0});
            this.seSortOrder.Location = new System.Drawing.Point(151, 195);
            this.seSortOrder.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
            this.seSortOrder.Name = "seSortOrder";
            this.seSortOrder.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
            this.seSortOrder.Properties.MaxValue = new decimal(new int[] {
            99999,
            0,
            0,
            0});
            this.seSortOrder.Size = new System.Drawing.Size(397, 28);
            this.seSortOrder.StyleController = this.layoutControl1;
            this.seSortOrder.TabIndex = 9;
            //
            // chkIsExpanded
            //
            this.chkIsExpanded.Location = new System.Drawing.Point(14, 227);
            this.chkIsExpanded.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
            this.chkIsExpanded.Name = "chkIsExpanded";
            this.chkIsExpanded.Properties.Caption = "默认展开";
            this.chkIsExpanded.Size = new System.Drawing.Size(534, 27);
            this.chkIsExpanded.StyleController = this.layoutControl1;
            this.chkIsExpanded.TabIndex = 10;
            //
            // chkIsEnabled
            //
            this.chkIsEnabled.EditValue = true;
            this.chkIsEnabled.Location = new System.Drawing.Point(14, 258);
            this.chkIsEnabled.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
            this.chkIsEnabled.Name = "chkIsEnabled";
            this.chkIsEnabled.Properties.Caption = "启用";
            this.chkIsEnabled.Size = new System.Drawing.Size(534, 27);
            this.chkIsEnabled.StyleController = this.layoutControl1;
            this.chkIsEnabled.TabIndex = 11;
            //
            // btnSave
            //
            this.btnSave.Location = new System.Drawing.Point(14, 418);
            this.btnSave.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
            this.btnSave.Name = "btnSave";
            this.btnSave.Size = new System.Drawing.Size(399, 32);
            this.btnSave.StyleController = this.layoutControl1;
            this.btnSave.TabIndex = 12;
            this.btnSave.Text = "保存";
            //
            // btnCancel
            //
            this.btnCancel.Location = new System.Drawing.Point(417, 418);
            this.btnCancel.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
            this.btnCancel.Name = "btnCancel";
            this.btnCancel.Size = new System.Drawing.Size(131, 32);
            this.btnCancel.StyleController = this.layoutControl1;
            this.btnCancel.TabIndex = 13;
            this.btnCancel.Text = "取消";
            //
            // layoutControlGroup1
            //
            this.layoutControlGroup1.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
            this.layoutControlGroup1.GroupBordersVisible = false;
            this.layoutControlGroup1.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
            this.layoutControlItem1,
            this.layoutControlItem2,
            this.layoutControlItem3,
            this.layoutControlItem4,
            this.layoutControlItem5,
            this.layoutControlItem6,
            this.layoutControlItem7,
            this.layoutControlItem8,
            this.emptySpaceItem1,
            this.layoutControlItem9,
            this.layoutControlItem10});
            this.layoutControlGroup1.Name = "layoutControlGroup1";
            this.layoutControlGroup1.Size = new System.Drawing.Size(562, 464);
            this.layoutControlGroup1.TextVisible = false;
            //
            // layoutControlItem1
            //
            this.layoutControlItem1.Control = this.txtCode;
            this.layoutControlItem1.Location = new System.Drawing.Point(0, 0);
            this.layoutControlItem1.Name = "layoutControlItem1";
            this.layoutControlItem1.Size = new System.Drawing.Size(538, 32);
            this.layoutControlItem1.Text = "编码:";
            this.layoutControlItem1.TextSize = new System.Drawing.Size(122, 22);
            //
            // layoutControlItem2
            //
            this.layoutControlItem2.Control = this.txtTitle;
            this.layoutControlItem2.Location = new System.Drawing.Point(0, 32);
            this.layoutControlItem2.Name = "layoutControlItem2";
            this.layoutControlItem2.Size = new System.Drawing.Size(538, 32);
            this.layoutControlItem2.Text = "名称:";
            this.layoutControlItem2.TextSize = new System.Drawing.Size(122, 22);
            //
            // layoutControlItem3
            //
            this.layoutControlItem3.Control = this.rgNodeType;
            this.layoutControlItem3.Location = new System.Drawing.Point(0, 64);
            this.layoutControlItem3.Name = "layoutControlItem3";
            this.layoutControlItem3.Size = new System.Drawing.Size(538, 53);
            this.layoutControlItem3.Text = "节点类型:";
            this.layoutControlItem3.TextSize = new System.Drawing.Size(122, 22);
            //
            // layoutControlItem4
            //
            this.layoutControlItem4.Control = this.txtUrl;
            this.layoutControlItem4.Location = new System.Drawing.Point(0, 117);
            this.layoutControlItem4.Name = "layoutControlItem4";
            this.layoutControlItem4.Size = new System.Drawing.Size(538, 32);
            this.layoutControlItem4.Text = "URL地址:";
            this.layoutControlItem4.TextSize = new System.Drawing.Size(122, 22);
            //
            // layoutControlItem5
            //
            this.layoutControlItem5.Control = this.seCarouselDuration;
            this.layoutControlItem5.Location = new System.Drawing.Point(0, 149);
            this.layoutControlItem5.Name = "layoutControlItem5";
            this.layoutControlItem5.Size = new System.Drawing.Size(538, 32);
            this.layoutControlItem5.Text = "轮播时长(秒):";
            this.layoutControlItem5.TextSize = new System.Drawing.Size(122, 22);
            //
            // layoutControlItem6
            //
            this.layoutControlItem6.Control = this.seSortOrder;
            this.layoutControlItem6.Location = new System.Drawing.Point(0, 181);
            this.layoutControlItem6.Name = "layoutControlItem6";
            this.layoutControlItem6.Size = new System.Drawing.Size(538, 32);
            this.layoutControlItem6.Text = "排序号:";
            this.layoutControlItem6.TextSize = new System.Drawing.Size(122, 22);
            //
            // layoutControlItem7
            //
            this.layoutControlItem7.Control = this.chkIsExpanded;
            this.layoutControlItem7.Location = new System.Drawing.Point(0, 213);
            this.layoutControlItem7.Name = "layoutControlItem7";
            this.layoutControlItem7.Size = new System.Drawing.Size(538, 31);
            this.layoutControlItem7.Text = "默认展开:";
            this.layoutControlItem7.TextSize = new System.Drawing.Size(0, 0);
            this.layoutControlItem7.TextVisible = false;
            //
            // layoutControlItem8
            //
            this.layoutControlItem8.Control = this.chkIsEnabled;
            this.layoutControlItem8.Location = new System.Drawing.Point(0, 244);
            this.layoutControlItem8.Name = "layoutControlItem8";
            this.layoutControlItem8.Size = new System.Drawing.Size(538, 31);
            this.layoutControlItem8.Text = "启用状态:";
            this.layoutControlItem8.TextSize = new System.Drawing.Size(0, 0);
            this.layoutControlItem8.TextVisible = false;
            //
            // emptySpaceItem1
            //
            this.emptySpaceItem1.AllowHotTrack = false;
            this.emptySpaceItem1.Location = new System.Drawing.Point(0, 275);
            this.emptySpaceItem1.Name = "emptySpaceItem1";
            this.emptySpaceItem1.Size = new System.Drawing.Size(538, 129);
            this.emptySpaceItem1.TextSize = new System.Drawing.Size(0, 0);
            //
            // layoutControlItem9
            //
            this.layoutControlItem9.Control = this.btnSave;
            this.layoutControlItem9.Location = new System.Drawing.Point(0, 404);
            this.layoutControlItem9.Name = "layoutControlItem9";
            this.layoutControlItem9.Size = new System.Drawing.Size(403, 36);
            this.layoutControlItem9.TextSize = new System.Drawing.Size(0, 0);
            this.layoutControlItem9.TextVisible = false;
            //
            // layoutControlItem10
            //
            this.layoutControlItem10.Control = this.btnCancel;
            this.layoutControlItem10.Location = new System.Drawing.Point(403, 404);
            this.layoutControlItem10.Name = "layoutControlItem10";
            this.layoutControlItem10.Size = new System.Drawing.Size(135, 36);
            this.layoutControlItem10.TextSize = new System.Drawing.Size(0, 0);
            this.layoutControlItem10.TextVisible = false;
            //
            // SimpleKanBanEdit
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 22F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(562, 464);
            this.Controls.Add(this.layoutControl1);
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
            this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.Name = "SimpleKanBanEdit";
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
            this.Text = "看板节点编辑";
            ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).EndInit();
            this.layoutControl1.ResumeLayout(false);
            ((System.ComponentModel.ISupportInitialize)(this.txtCode.Properties)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.txtTitle.Properties)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.rgNodeType.Properties)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.txtUrl.Properties)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.seCarouselDuration.Properties)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.seSortOrder.Properties)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.chkIsExpanded.Properties)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.chkIsEnabled.Properties)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup1)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem3)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem4)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem6)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem7)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem8)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem1)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem9)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem10)).EndInit();
            this.ResumeLayout(false);
        }
        #endregion
        private DevExpress.XtraLayout.LayoutControl layoutControl1;
        private DevExpress.XtraEditors.TextEdit txtCode;
        private DevExpress.XtraEditors.TextEdit txtTitle;
        private DevExpress.XtraEditors.RadioGroup rgNodeType;
        private DevExpress.XtraEditors.TextEdit txtUrl;
        private DevExpress.XtraEditors.SpinEdit seCarouselDuration;
        private DevExpress.XtraEditors.SpinEdit seSortOrder;
        private DevExpress.XtraEditors.CheckEdit chkIsExpanded;
        private DevExpress.XtraEditors.CheckEdit chkIsEnabled;
        private DevExpress.XtraEditors.SimpleButton btnSave;
        private DevExpress.XtraEditors.SimpleButton btnCancel;
        private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup1;
        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem4;
        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem5;
        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem6;
        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem7;
        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem8;
        private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem1;
        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem9;
        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem10;
    }
}
DevApp/Gs.DevApp/DevFrm/Sys/SimpleKanBanEdit.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,352 @@
using DevExpress.XtraEditors;
using Gs.DevApp.ToolBox;
using Newtonsoft.Json;
using System;
using System.Windows.Forms;
namespace Gs.DevApp.DevFrm.Sys
{
    /// <summary>
    /// çœ‹æ¿èŠ‚ç‚¹ç¼–è¾‘çª—ä½“
    /// </summary>
    public partial class SimpleKanBanEdit : DevExpress.XtraEditors.XtraForm
    {
        private string _webServiceName = "MesSimpleManager/";
        private string _strId = "";      // å½“前编辑的节点ID(为空表示新增)
        private string _strFid = "";     // çˆ¶èŠ‚ç‚¹ID
        private int _nodeLevel = 0;       // èŠ‚ç‚¹å±‚çº§
        private bool _isEditMode = false; // æ˜¯å¦ä¸ºç¼–辑模式
        private bool _isLoading = false; // æ˜¯å¦æ­£åœ¨åŠ è½½æ•°æ®
        /// <summary>
        /// ä¿å­˜æˆåŠŸåŽçš„å›žè°ƒäº‹ä»¶
        /// </summary>
        public event EventHandler<UpdateParentEventArgs> UpdateParent;
        /// <summary>
        /// æž„造函数
        /// </summary>
        /// <param name="strId">节点ID,为空表示新增</param>
        /// <param name="strFid">父节点ID,为空表示根节点</param>
        public SimpleKanBanEdit(string strId, string strFid)
        {
            InitializeComponent();
            rgNodeType.EditValueChanged += RgNodeType_EditValueChanged;
            _strId = strId;
            _strFid = strFid;
            _isEditMode = !string.IsNullOrEmpty(_strId);
            // è®¾ç½®çª—体标题
            this.Text = _isEditMode ? "编辑看板节点" : "新增看板节点";
            // åˆå§‹åŒ–节点类型选项(0=根目录, 1=看板目录, 2=看板内容)
            rgNodeType.Properties.Items.Clear();
            rgNodeType.Properties.Items.Add(new DevExpress.XtraEditors.Controls.RadioGroupItem(0, "根目录"));
            rgNodeType.Properties.Items.Add(new DevExpress.XtraEditors.Controls.RadioGroupItem(1, "看板目录"));
            rgNodeType.Properties.Items.Add(new DevExpress.XtraEditors.Controls.RadioGroupItem(2, "看板内容"));
            // ä¿å­˜æŒ‰é’®
            btnSave.Click += BtnSave_Click;
            // å–消按钮
            btnCancel.Click += (s, e) => { this.Close(); };
            // åˆå§‹åŒ–默认值
            seSortOrder.Value = 0;
            seCarouselDuration.Value = 10;
            chkIsExpanded.Checked = false;
            chkIsEnabled.Checked = true;
            // åŠ è½½æ•°æ®
            if (_isEditMode)
            {
                LoadModel();
            }
            else
            {
                // æ–°å¢žæ¨¡å¼ï¼šæ ¹æ®çˆ¶èŠ‚ç‚¹è®¡ç®—å½“å‰èŠ‚ç‚¹å±‚çº§å¹¶è®¾ç½®èŠ‚ç‚¹ç±»åž‹
                InitNodeLevelAndType();
            }
        }
        /// <summary>
        /// æ–°å¢žæ¨¡å¼ï¼šåˆå§‹åŒ–节点层级
        /// è§„则:
        /// - node_level = 0:根节点
        /// - node_level >= 1:非根节点
        /// </summary>
        private void InitNodeLevelAndType()
        {
            if (string.IsNullOrEmpty(_strFid))
            {
                // æ— çˆ¶èŠ‚ç‚¹ï¼Œè¯´æ˜Žæ˜¯æ ¹èŠ‚ç‚¹
                _nodeLevel = 0;
            }
            else
            {
                // æœ‰çˆ¶èŠ‚ç‚¹ï¼ŒåŸºäºŽçˆ¶èŠ‚ç‚¹å±‚çº§ +1
                try
                {
                    var _obj = new { Id = long.Parse(_strFid) };
                    var json = JsonConvert.SerializeObject(_obj);
                    var strReturn = UtilityHelper.HttpPost("", _webServiceName + "GetModel", json);
                    var dd = UtilityHelper.ReturnToDynamic(strReturn);
                    if (dd.rtnCode > 0 && dd.rtnData != null)
                    {
                        int parentNodeLevel = dd.rtnData.nodeLevel != null
                            ? Convert.ToInt32(dd.rtnData.nodeLevel)
                            : 0;
                        _nodeLevel = parentNodeLevel + 1;
                    }
                    else
                    {
                        _nodeLevel = 1;
                    }
                }
                catch
                {
                    _nodeLevel = 1;
                }
            }
            // æ ¹æ®å±‚级初始化 NodeType & æŽ§ä»¶çŠ¶æ€
            SetNodeTypeByLevel();
        }
        /// <summary>
        /// æ ¹æ®èŠ‚ç‚¹å±‚çº§è®¾ç½®èŠ‚ç‚¹ç±»åž‹
        /// - node_level = 0:只能选 0(根目录),整个控件禁用
        /// - node_level >= 1:只能选 1 / 2,根目录项灰掉不可选
        /// </summary>
        private void SetNodeTypeByLevel()
        {
            // å…ˆç»Ÿä¸€å¯ç”¨æŽ§ä»¶ï¼ŒåŽé¢æŒ‰æƒ…况处理
            rgNodeType.Enabled = true;
            if (_nodeLevel == 0)
            {
                // æ ¹èŠ‚ç‚¹ï¼šåªèƒ½æ˜¯æ ¹ç›®å½•
                rgNodeType.EditValue = 0;
                rgNodeType.Enabled = false;
            }
            else
            {
                // éžæ ¹èŠ‚ç‚¹ï¼šä¸èƒ½é€‰â€œæ ¹ç›®å½•(0)”
                DisableRootNodeTypeItem();
                // å¦‚果当前值是 0,强制切到默认值
                if (rgNodeType.EditValue == null ||
                    Convert.ToInt32(rgNodeType.EditValue) == 0)
                {
                    rgNodeType.EditValue = 1; // é»˜è®¤â€œçœ‹æ¿ç›®å½•”
                }
            }
            SetControlsByNodeType();
        }
        /// <summary>
        /// ç¦ç”¨ NodeType=0(根目录)选项
        /// </summary>
        private void DisableRootNodeTypeItem()
        {
            foreach (DevExpress.XtraEditors.Controls.RadioGroupItem item in rgNodeType.Properties.Items)
            {
                if (Convert.ToInt32(item.Value) == 0)
                {
                    item.Enabled = false;
                    break;
                }
            }
        }
        private void LoadModel()
        {
            try
            {
                var _obj = new { Id = long.Parse(_strId) };
                var json = JsonConvert.SerializeObject(_obj);
                var strReturn = UtilityHelper.HttpPost("", _webServiceName + "GetModel", json);
                var dd = UtilityHelper.ReturnToDynamic(strReturn);
                if (dd.rtnCode > 0 && dd.rtnData != null)
                {
                    var m = dd.rtnData;
                    // 1. åŸºç¡€èµ‹å€¼
                    txtCode.Text = m.code != null ? m.code.ToString() : "";
                    txtTitle.Text = m.title != null ? m.title.ToString() : "";
                    txtUrl.Text = m.url != null ? m.url.ToString() : "";
                    _isLoading = true;
                    _nodeLevel = m.nodeLevel != null ? Convert.ToInt32(m.nodeLevel) : 0;
                    if (m.parentId != null) _strFid = m.parentId.ToString();
                    if (m.nodeType != null)
                    {
                        int type = Convert.ToInt32(m.nodeType);
                        rgNodeType.EditValue = type;
                        // èŽ·å–å­èŠ‚ç‚¹æ•°é‡ (从存储过程新增的字段)
                        int childCount = m.childCount != null ? Convert.ToInt32(m.childCount) : 0;
                        // é€»è¾‘判断
                        if (type == 0)
                        {
                            // æ ¹ç›®å½•:永远不可修改
                            rgNodeType.Properties.ReadOnly = true;
                        }
                        else
                        {
                            if (childCount > 0)
                            {
                                rgNodeType.Properties.ReadOnly = true;
                                // å¯ä»¥ç»™ç”¨æˆ·ä¸€ä¸ªæç¤º(Tooltip)或在保存时体现,这里仅控制UI只读
                            }
                            else
                            {
                                rgNodeType.Properties.ReadOnly = false;
                            }
                        }
                    }
                    SetControlsByNodeType(); // åˆ·æ–°ç•Œé¢
                    _isLoading = false;
                    // å…¶ä»–字段
                    if (m.carouselDuration != null) seCarouselDuration.Value = Convert.ToInt32(m.carouselDuration);
                    if (m.sortOrder != null) seSortOrder.Value = Convert.ToInt32(m.sortOrder);
                    chkIsExpanded.Checked = m.isExpanded != null && Convert.ToBoolean(m.isExpanded);
                    chkIsEnabled.Checked = m.isEnabled != null && Convert.ToBoolean(m.isEnabled);
                }
                else
                {
                    MsgHelper.ShowError("加载数据失败:" + dd.rtnMsg);
                }
            }
            catch (Exception ex)
            {
                MsgHelper.ShowError("加载数据异常:" + ex.Message);
            }
        }
        /// <summary>
        /// æ ¹æ®èŠ‚ç‚¹å±‚çº§ï¼ˆnode_level)设置 URL å’Œè½®æ’­æ—¶é•¿æ˜¾ç¤ºçŠ¶æ€
        /// </summary>
        private void SetControlsByNodeType()
        {
            int nodeType = Convert.ToInt32(rgNodeType.EditValue);
            // åªæœ‰ nodeType == 2(看板内容)才显示
            bool show = (nodeType == 2);
            SetUrlAndDurationVisible(show);
        }
        /// <summary>
        /// ç±»åž‹æ›´æ”¹è‡ªåŠ¨åˆ·æ–°
        /// </summary>
        private void RgNodeType_EditValueChanged(object sender, EventArgs e)
        {
            SetControlsByNodeType();
        }
        /// <summary>
        /// è®¾ç½® URL å’Œè½®æ’­æ—¶é•¿çš„æ˜¾ç¤ºçŠ¶æ€
        /// </summary>
        private void SetUrlAndDurationVisible(bool visible)
        {
            // æŽ§åˆ¶å¯è§æ€§
            layoutControlItem4.Visibility = visible
                ? DevExpress.XtraLayout.Utils.LayoutVisibility.Always
                : DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
            layoutControlItem5.Visibility = visible
                ? DevExpress.XtraLayout.Utils.LayoutVisibility.Always
                : DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
            // æŽ§åˆ¶å¯ç¼–辑状态
            txtUrl.Enabled = visible;
            seCarouselDuration.Enabled = visible;
            if (!visible)
            {
                // ä¸å¯è§æ—¶æ¸…空
                txtUrl.Text = string.Empty;
                seCarouselDuration.Value = 0;
            }
            else
            {
                // å¯è§æ—¶ç»™é»˜è®¤å€¼
                if (seCarouselDuration.Value <= 0)
                {
                    seCarouselDuration.Value = 5; // é»˜è®¤ 5 ç§’
                }
            }
        }
        /// <summary>
        /// ä¿å­˜æŒ‰é’®ç‚¹å‡»äº‹ä»¶
        /// </summary>
        private void BtnSave_Click(object sender, EventArgs e)
        {
            // éªŒè¯å¿…填项
            if (string.IsNullOrWhiteSpace(txtTitle.Text))
            {
                MsgHelper.Warning("名称不能为空!");
                txtTitle.Focus();
                return;
            }
            // èŠ‚ç‚¹ç±»åž‹ä¸ºçœ‹æ¿å†…å®¹æ—¶ï¼ŒURL不能为空
            if ((int)rgNodeType.EditValue == 2 && string.IsNullOrWhiteSpace(txtUrl.Text))
            {
                MsgHelper.Warning("看板内容的URL地址不能为空!");
                txtUrl.Focus();
                return;
            }
            try
            {
                // æž„建保存对象
                var _obj = new
                {
                    Id = string.IsNullOrEmpty(_strId) ? 0 : long.Parse(_strId),
                    ParentId = string.IsNullOrEmpty(_strFid) ? (long?)null : long.Parse(_strFid),
                    NodeType = (int)rgNodeType.EditValue,
                    Code = string.IsNullOrWhiteSpace(txtCode.Text) ? null : txtCode.Text.Trim(),
                    Title = txtTitle.Text.Trim(),
                    Url = string.IsNullOrWhiteSpace(txtUrl.Text) ? null : txtUrl.Text.Trim(),
                    CarouselDuration = (int)rgNodeType.EditValue == 2 ? (int?)seCarouselDuration.Value : null,
                    IsExpanded = chkIsExpanded.Checked,
                    IsEnabled = chkIsEnabled.Checked,
                    SortOrder = (int)seSortOrder.Value
                };
                var json = JsonConvert.SerializeObject(_obj);
                var strReturn = UtilityHelper.HttpPost("", _webServiceName + "SaveModel", json);
                var dd = UtilityHelper.ReturnToDynamic(strReturn);
                if (dd.rtnCode > 0)
                {
                    MsgHelper.ShowInformation("保存成功!");
                    // è§¦å‘父窗体刷新事件
                    UpdateParent?.Invoke(this, new UpdateParentEventArgs());
                    this.Close();
                }
                else
                {
                    MsgHelper.ShowError("保存失败:" + dd.rtnMsg);
                }
            }
            catch (Exception ex)
            {
                MsgHelper.ShowError("保存异常:" + ex.Message);
            }
        }
    }
}
DevApp/Gs.DevApp/DevFrm/Sys/SimpleKanBanEdit.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>
DevApp/Gs.DevApp/Gs.DevApp.csproj
@@ -987,6 +987,12 @@
    <Compile Include="DevFrm\Sales\Frm_SalesReturnNoticeSelectLink.Designer.cs">
      <DependentUpon>Frm_SalesReturnNoticeSelectLink.cs</DependentUpon>
    </Compile>
    <Compile Include="DevFrm\Sys\DefectCodeKanban.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="DevFrm\Sys\DefectCodeKanban.Designer.cs">
      <DependentUpon>DefectCodeKanban.cs</DependentUpon>
    </Compile>
    <Compile Include="DevFrm\Sys\EasyRptEdt.cs">
      <SubType>Form</SubType>
    </Compile>
@@ -1004,6 +1010,18 @@
    </Compile>
    <Compile Include="DevFrm\Sys\Frm_Config.Designer.cs">
      <DependentUpon>Frm_Config.cs</DependentUpon>
    </Compile>
    <Compile Include="DevFrm\Sys\SimpleKanBan.cs">
      <SubType>UserControl</SubType>
    </Compile>
    <Compile Include="DevFrm\Sys\SimpleKanBan.Designer.cs">
      <DependentUpon>SimpleKanBan.cs</DependentUpon>
    </Compile>
    <Compile Include="DevFrm\Sys\SimpleKanBanEdit.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="DevFrm\Sys\SimpleKanBanEdit.Designer.cs">
      <DependentUpon>SimpleKanBanEdit.cs</DependentUpon>
    </Compile>
    <Compile Include="DevFrm\User\ViewRole.cs">
      <SubType>Form</SubType>
@@ -2129,6 +2147,9 @@
    <EmbeddedResource Include="DevFrm\Sales\Frm_SalesReturnNoticeSelectLink.resx">
      <DependentUpon>Frm_SalesReturnNoticeSelectLink.cs</DependentUpon>
    </EmbeddedResource>
    <EmbeddedResource Include="DevFrm\Sys\DefectCodeKanban.resx">
      <DependentUpon>DefectCodeKanban.cs</DependentUpon>
    </EmbeddedResource>
    <EmbeddedResource Include="DevFrm\Sys\EasyRptEdt.resx">
      <DependentUpon>EasyRptEdt.cs</DependentUpon>
    </EmbeddedResource>
@@ -2138,6 +2159,12 @@
    <EmbeddedResource Include="DevFrm\Sys\Frm_Config.resx">
      <DependentUpon>Frm_Config.cs</DependentUpon>
    </EmbeddedResource>
    <EmbeddedResource Include="DevFrm\Sys\SimpleKanBan.resx">
      <DependentUpon>SimpleKanBan.cs</DependentUpon>
    </EmbeddedResource>
    <EmbeddedResource Include="DevFrm\Sys\SimpleKanBanEdit.resx">
      <DependentUpon>SimpleKanBanEdit.cs</DependentUpon>
    </EmbeddedResource>
    <EmbeddedResource Include="DevFrm\User\ViewRole.resx">
      <DependentUpon>ViewRole.cs</DependentUpon>
    </EmbeddedResource>
DevApp/Gs.DevApp/UserControl/SelectHz.Designer.cs
@@ -40,6 +40,7 @@
            this.gv_time = new DevExpress.XtraGrid.Columns.GridColumn();
            this.gv_Btn = new DevExpress.XtraGrid.Columns.GridColumn();
            this.repositoryItemButtonEdit1 = new DevExpress.XtraEditors.Repository.RepositoryItemButtonEdit();
            this.gridColumn1 = new DevExpress.XtraGrid.Columns.GridColumn();
            ((System.ComponentModel.ISupportInitialize)(this.gcMain)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.repositoryItemButtonEdit1)).BeginInit();
@@ -48,26 +49,28 @@
            // gcMain
            // 
            this.gcMain.Dock = System.Windows.Forms.DockStyle.Fill;
            this.gcMain.EmbeddedNavigator.Margin = new System.Windows.Forms.Padding(4);
            this.gcMain.Location = new System.Drawing.Point(0, 0);
            this.gcMain.MainView = this.gridView1;
            this.gcMain.Margin = new System.Windows.Forms.Padding(4);
            this.gcMain.Name = "gcMain";
            this.gcMain.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] {
            this.repositoryItemButtonEdit1});
            this.gcMain.Size = new System.Drawing.Size(581, 489);
            this.gcMain.Size = new System.Drawing.Size(1014, 600);
            this.gcMain.TabIndex = 3;
            this.gcMain.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
            this.gridView1});
            // 
            // gridView1
            // 
            this.gridView1.Appearance.Row.Options.UseFont = true;
            this.gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] {
            this.gv_Name,
            this.gv_no,
            this.gv_time,
            this.gv_Btn});
            this.gv_Btn,
            this.gridColumn1});
            this.gridView1.DetailHeight = 428;
            this.gridView1.GridControl = this.gcMain;
            this.gridView1.Name = "gridView1";
            this.gridView1.OptionsFind.ShowSearchNavButtons = false;
@@ -76,53 +79,50 @@
            // 
            // gv_Name
            // 
            this.gv_Name.AppearanceCell.Options.UseFont = true;
            this.gv_Name.Caption = "名称";
            this.gv_Name.FieldName = "name";
            this.gv_Name.MinWidth = 10;
            this.gv_Name.MinWidth = 12;
            this.gv_Name.Name = "gv_Name";
            this.gv_Name.OptionsColumn.AllowEdit = false;
            this.gv_Name.Tag = "query_OPERATION_TIME";
            this.gv_Name.Visible = true;
            this.gv_Name.VisibleIndex = 0;
            this.gv_Name.Width = 300;
            this.gv_Name.Width = 375;
            // 
            // gv_no
            // 
            this.gv_no.AppearanceCell.Options.UseFont = true;
            this.gv_no.Caption = "编号";
            this.gv_no.FieldName = "fNumber";
            this.gv_no.MinWidth = 10;
            this.gv_no.MinWidth = 12;
            this.gv_no.Name = "gv_no";
            this.gv_no.OptionsColumn.AllowEdit = false;
            this.gv_no.Tag = "query_OPERATION_TABLE";
            this.gv_no.Visible = true;
            this.gv_no.VisibleIndex = 1;
            this.gv_no.Width = 100;
            this.gv_no.VisibleIndex = 2;
            this.gv_no.Width = 125;
            // 
            // gv_time
            // 
            this.gv_time.AppearanceCell.Options.UseFont = true;
            this.gv_time.Caption = "同步时间";
            this.gv_time.FieldName = "edtTime";
            this.gv_time.MinWidth = 10;
            this.gv_time.MinWidth = 12;
            this.gv_time.Name = "gv_time";
            this.gv_time.OptionsColumn.AllowEdit = false;
            this.gv_time.Tag = "query_USER_NAME";
            this.gv_time.Width = 250;
            this.gv_time.Width = 312;
            // 
            // gv_Btn
            // 
            this.gv_Btn.Caption = "选择";
            this.gv_Btn.ColumnEdit = this.repositoryItemButtonEdit1;
            this.gv_Btn.MinWidth = 25;
            this.gv_Btn.MinWidth = 31;
            this.gv_Btn.Name = "gv_Btn";
            this.gv_Btn.Visible = true;
            this.gv_Btn.VisibleIndex = 2;
            this.gv_Btn.Width = 94;
            this.gv_Btn.VisibleIndex = 3;
            this.gv_Btn.Width = 117;
            // 
            // repositoryItemButtonEdit1
            // 
@@ -135,13 +135,24 @@
            this.repositoryItemButtonEdit1.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.HideTextEditor;
            this.repositoryItemButtonEdit1.ButtonClick += new DevExpress.XtraEditors.Controls.ButtonPressedEventHandler(this.repositoryItemButtonEdit1_ButtonClick);
            // 
            // gridColumn1
            //
            this.gridColumn1.Caption = "组织";
            this.gridColumn1.FieldName = "fSubsidiary";
            this.gridColumn1.MinWidth = 30;
            this.gridColumn1.Name = "gridColumn1";
            this.gridColumn1.Visible = true;
            this.gridColumn1.VisibleIndex = 1;
            this.gridColumn1.Width = 94;
            //
            // SelectHz
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 18F);
            this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 22F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(581, 489);
            this.ClientSize = new System.Drawing.Size(1014, 600);
            this.Controls.Add(this.gcMain);
            this.IconOptions.Image = global::Gs.DevApp.Properties.Resources.logo_png_black;
            this.Margin = new System.Windows.Forms.Padding(4);
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.Name = "SelectHz";
@@ -163,5 +174,6 @@
        private DevExpress.XtraGrid.Columns.GridColumn gv_time;
        private DevExpress.XtraGrid.Columns.GridColumn gv_Btn;
        private DevExpress.XtraEditors.Repository.RepositoryItemButtonEdit repositoryItemButtonEdit1;
        private DevExpress.XtraGrid.Columns.GridColumn gridColumn1;
    }
}