コード例 #1
0
        private void UCDevicesCollectionConfig_Load(object sender, EventArgs e)
        {
            addedDevs = Devices.DevicesCollection.Devices;
            SetListViewDateSet(addedDevs);

            devs = Devices.DevicesCollection.GetCanAddDevices();

            //var list = devs.Select<DevicesInformation, dynamic>(o => new { Text = o.Name, Tag = o }).ToList();
            //comboBox1.DataSource = list;
            //comboBox1.DisplayMember = "Text";
            //comboBox1.ValueMember = "Tag";

            List <TreeValue> tree = new List <TreeValue>();

            devs.ForEach(d => {
                TreeValue node = tree.FirstOrDefault(n => n.Display == d.Brand);
                if (node == null)
                {
                    tree.Add(node = new TreeValue {
                        Display = d.Brand, Nodes = new List <TreeValue>()
                    });
                }
                node.Nodes.Add(new TreeValue {
                    Display = d.Name, Value = d
                });
            });


            treeComboBox1.DisplayMember   = "Display";
            treeComboBox1.NodesMember     = "Nodes";
            this.treeComboBox1.DataSource = tree;

            this.treeComboBox1.SelectedIndex = 0;
        }
コード例 #2
0
ファイル: Default3CDataProvider.cs プロジェクト: qwdingyu/C-
        private void AddFillValue(FillValue3C fillValue, TreeValue value, Hashtable set)
        {
            string[]  values = string.IsNullOrEmpty(fillValue.Value) ? new string[] { fillValue.Value } : fillValue.Value.Split(new char[] { '\t' }, StringSplitOptions.RemoveEmptyEntries);
            TreeValue temp   = null;

            if (values.Length == 1 || value == null || value.Parent == null)
            {
                fillValue.SetValue(values[0]);
                InitFilesFullName(fillValue);
                set.Add(fillValue.Key, fillValue);
            }
            else
            {
                int appendIndex = 1000;
                for (int i = 0; i < values.Length; i++)
                {
                    if (i == 0)
                    {
                        temp = value;
                    }
                    else
                    {
                        temp = value.Parent.FindChild(value.Name, string.Format("{0}{1}", value.Suffix, appendIndex));
                    }
                    if (temp == null)
                    {
                        temp = new TreeValue(value.Name, string.Format("{0}{1}", value.Suffix, appendIndex));
                        temp.CopyFrom(value);
                        value.Parent.AddChild(temp);
                    }
                    FillValue3C tempValue = new FillValue3C();
                    tempValue.CopyFrom(fillValue);
                    tempValue.SetValue(values[i]);
                    InitFilesFullName(tempValue);
                    temp.Values.Add(tempValue.Key, tempValue);
                    appendIndex++;
                }
            }
            if (value.Parent == null)
            {
                return;
            }
            // 设置新增节点默认值
            int index = 1001;

            temp = value.Parent.FindChild(value.Name, string.Format("{0}{1}", value.Suffix, index));
            while (temp != null)
            {
                foreach (DictionaryEntry entry in value.Values)
                {
                    object val = temp.Values[entry.Key];
                    if (val == null)
                    {
                        temp.Values[entry.Key] = entry.Value;
                    }
                }
                index++;
                temp = value.Parent.FindChild(value.Name, string.Format("{0}{1}", value.Suffix, index));
            }
        }
コード例 #3
0
ファイル: CCCDataProvider.cs プロジェクト: qwdingyu/C-
 private void WriteExcelRow(TreeValue value, ISheet source, ISheet dest, Hashtable valueColumns, int lastValueIndex)
 {
     foreach (DictionaryEntry entry in value.Values)
     {
         FillValue3C fillValue = entry.Value as FillValue3C;
     }
 }
コード例 #4
0
ファイル: TypeReflection.cs プロジェクト: 24/source_04
        private TreeValue <TypeValueInfo> GetTreeValue(TreeOpe treeOpe)
        {
            TreeValue <TypeValueInfo> treeValue = new TreeValue <TypeValueInfo> {
                Index = _index, Value = _typeValueInfo, Level = _level, TreeOpe = treeOpe, Selected = false, Skip = false, Stop = false
            };

            TreeFilter treeFilter = TreeFilter.Select;

            if (_filter != null)
            {
                treeFilter = _filter(_typeValueInfo);
            }

            if ((treeFilter & TreeFilter.Stop) == TreeFilter.Stop)
            {
                treeValue.Stop = true;
            }

            else if ((treeFilter & TreeFilter.Skip) == TreeFilter.Skip)
            {
                treeValue.Skip = true;
            }

            else if ((treeFilter & TreeFilter.DontSelect) == 0)
            {
                treeValue.Selected = true;
            }
            return(treeValue);
        }
コード例 #5
0
ファイル: CCCFiller.cs プロジェクト: qwdingyu/C-
        internal static void WriteTreeDir(Office.Excel.ForwardWriteWorksheet sheet, TreeValue value)
        {
            sheet.WriteNextRow();
            Match match = Main_3C.nodeMatcher.Match(value.Name);

            if (match.Success)
            {
                sheet.WriteTextCell(1, sheet.Owner.AddSharedString(match.Groups["no"].Value));
            }
            else
            {
                sheet.WriteTextCell(1, sheet.Owner.AddSharedString("#"));
            }
            sheet.WriteTextCell(2, sheet.Owner.AddSharedString(value.Name));
            match = Main_3C.nodeMatcher.Match(value.Parent == null ? "" : value.Parent.Name);
            if (match.Success)
            {
                sheet.WriteTextCell(3, sheet.Owner.AddSharedString(match.Groups["no"].Value));
            }
            else if (value.Parent != null)
            {
                sheet.WriteTextCell(3, sheet.Owner.AddSharedString("#"));
            }
            foreach (var item in value.Children)
            {
                WriteTreeDir(sheet, item);
            }
        }
コード例 #6
0
        public override object Convert(string fileName, string sheetName, object parameters)
        {
            ReadConverterRule(fileName, sheetName);
            TreeValue value = (TreeValue)parameters;

            EnumAndConvertTree(value);
            return(value);
        }
コード例 #7
0
ファイル: CCCFiller.cs プロジェクト: qwdingyu/C-
        /// <summary>
        /// 从Excel文件中读取树节点的父子级关系。
        /// </summary>
        /// <returns></returns>
        private TreeValue InitTreeNode()
        {
            TreeValue value = null, parent = null, root = null;
            Hashtable table = new Hashtable();

            using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(@"..\..\..\演示数据\CCC\目录字典.xlsx"))
            {
                reader.Open();
                Office.Excel.ForwardReadWorksheet sheet = reader.Activate(1) as Office.Excel.ForwardReadWorksheet;
                sheet.ReadFollowingRow(2);
                string id = null, name = null, parentId = null;
                object content = null;
                do
                {
                    while (sheet.ReadNextCell(false))
                    {
                        content = sheet.GetContent();
                        switch (sheet.CurrentCell.ColumnIndex)
                        {
                        case 1:
                            id = content == null ? null : content.ToString();
                            break;

                        case 2:
                            name = content == null ? null : content.ToString();
                            break;

                        case 3:
                            parentId = content == null ? null : content.ToString();
                            break;
                        }
                    }
                    if (id == null || name == null)
                    {
                        continue;
                    }
                    value = new TreeValue(name, parentId, null);
                    table.Add(id, value);
                } while (sheet.ReadNextRow());
            }
            foreach (DictionaryEntry entry in table)
            {
                value = entry.Value as TreeValue;
                if (value != null)
                {
                    if (value.Parent == null)
                    {
                        root = value;
                    }
                    else
                    {
                        parent = table[value.Parent.Name] as TreeValue;
                        parent.AddChild(value);
                    }
                }
            }
            return(root);
        }
コード例 #8
0
ファイル: Default3CDataProvider.cs プロジェクト: qwdingyu/C-
        /// <summary>
        /// 从Excel文件中读取树节点的父子级关系。
        /// </summary>
        /// <returns></returns>
        private TreeValue InitTreeNode()
        {
            TreeValue value = null, parent = null, root = null;
            string    fileName     = FileHelper.GetPublicPage(FillRuleVerson, FillType);
            string    ruleFilePath = FileHelper.GetFillVersionByName(FillRuleVerson);
            Hashtable table        = new Hashtable();

            using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(string.Format(@"{0}\{1}", ruleFilePath, fileName)))
            {
                reader.Open();
                Office.Excel.ForwardReadWorksheet sheet = reader.Activate(1) as Office.Excel.ForwardReadWorksheet;
                sheet.ReadFollowingRow(2);
                string name = null, parentName = null;
                object content = null;
                do
                {
                    while (sheet.ReadNextCell(false))
                    {
                        content = sheet.GetContent();
                        switch (sheet.CurrentCell.ColumnIndex)
                        {
                        case 1:
                            name = content == null ? null : content.ToString();
                            break;

                        case 2:
                            parentName = content == null ? null : content.ToString();
                            break;
                        }
                    }
                    if (name == null)
                    {
                        continue;
                    }
                    value = new TreeValue(name, parentName, null);
                    table.Add(name, value);
                } while (sheet.ReadNextRow());
            }
            foreach (DictionaryEntry entry in table)
            {
                value = entry.Value as TreeValue;
                if (value != null)
                {
                    if (value.Parent == null)
                    {
                        root = value;
                    }
                    else
                    {
                        parent = table[value.Parent.Name] as TreeValue;
                        parent.AddChild(value);
                    }
                }
            }
            return(root);
        }
コード例 #9
0
ファイル: CCCFiller.cs プロジェクト: qwdingyu/C-
        private void FillWorker(object state)
        {
            FillDialog_3C.BeginListen();
            string        windowType = null;
            FillDialog_3C fill       = FillDialog_3C.GetFillDialog(out windowType);

            try
            {
                _fillParameters = this.ReadFillParameter(@"..\..\..\演示数据\CCC\CCC填报规则.xlsx");
                TreeValue root = this.ReadData(DataFile);
                FillDialog_3C.BeginListen();
                windowType = null;
                fill       = FillDialog_3C.GetFillDialog(out windowType);
                if (fill != null)
                {
                    if (windowType == CCCWindowType.LoginWindow)
                    {
                        fill.FillValue = _data["厂商关系"] as FillValue3C;
                        fill.DoFillWork(_data["登录证书"]);
                    }
                    else if (windowType == CCCWindowType.FirmWindow)
                    {
                        FillValue3C value = _data["厂商关系"] as FillValue3C;
                        fill.DoFillWork(value == null ? "" : value.Value);
                    }
                }

                main = Main_3C.GetMainWindow(this.DataFile);
                //this.SetWindowPos();
                main.FillParameters = this._fillParameters;
                this.GetTreeView();
                main.TreeValue = root;
                while (main.SelectNextNode(true))
                {
                    main.FillPage();
                }
            }
            catch
            {
                this.EndFill();
            }
        }
コード例 #10
0
ファイル: Default3CDataProvider.cs プロジェクト: qwdingyu/C-
        /// <summary>
        /// 从树节点生成一个以其Name为键值的散列表。
        /// </summary>
        /// <param name="root"></param>
        /// <returns></returns>
        private Hashtable GetTreeDir(TreeValue root)
        {
            Hashtable table = new Hashtable();
            Stack <KeyValuePair <TreeValue, int> > stack = new Stack <KeyValuePair <TreeValue, int> >();

            table.Add(root.Name, root);
            TreeValue current = root;

            for (int index = 0; index < current.Children.Count; index++)
            {
                table.Add(current.Children[index].Name, current.Children[index]);
                if (current.Children[index].Children.Count > 0)
                {
                    stack.Push(new KeyValuePair <TreeValue, int>(current, index));
                    current = current.Children[index];
                    index   = -1;
                    continue;
                }
                else if (index >= current.Children.Count - 1)
                {
                    while (stack.Count > 0)
                    {
                        KeyValuePair <TreeValue, int> lastPush = stack.Pop();
                        current = lastPush.Key;
                        index   = lastPush.Value;
                        if (index >= current.Children.Count - 1)
                        {
                            continue;
                        }
                        else
                        {
                            break;
                        }
                    }
                }
            }
            return(table);
        }
コード例 #11
0
ファイル: CCCFiller.cs プロジェクト: qwdingyu/C-
        public void GenerateDir()
        {
            if (main == null)
            {
                main = Main_3C.GetMainWindow("");
            }
            if (main.TreeView.GetCount() == 0)
            {
                return;
            }
            TreeValue root = main.GetTreeStructure();

            using (Office.Excel.ForwardExcelWriter writer = new Office.Excel.ForwardExcelWriter("目录字典.xlsx"))
            {
                writer.Open();
                Office.Excel.ForwardWriteWorksheet sheet = writer.CreateWorksheet() as Office.Excel.ForwardWriteWorksheet;
                sheet.WriteNextRow();
                sheet.WriteTextCell(1, writer.AddSharedString("Id"));
                sheet.WriteTextCell(2, writer.AddSharedString("目录名称"));
                sheet.WriteTextCell(3, writer.AddSharedString("父级目录Id"));
                WriteTreeDir(sheet, root);
            }
        }
コード例 #12
0
 private void EnumAndConvertTree(TreeValue tree)
 {
     if (tree != null)
     {
         if (tree.Values != null)
         {
             foreach (DictionaryEntry entry in tree.Values)
             {
                 if (_converter.ContainsKey(entry.Key))
                 {
                     InnerConvert(entry.Value as FillValue3C, _converter[entry.Key] as ConverterParameter);
                 }
             }
         }
         if (tree.Children != null)
         {
             foreach (var child in tree.Children)
             {
                 EnumAndConvertTree(child);
             }
         }
     }
 }
コード例 #13
0
        private void button1_Click(object sender, EventArgs e)
        {
            //DevicesInformation info = comboBox1.SelectedValue as DevicesInformation;
            TreeValue          tree = this.treeComboBox1.SelectedItem as TreeValue;
            DevicesInformation info = tree?.Value as DevicesInformation;

            if (info == null)
            {
                return;
            }
            IDevices newDev = Devices.DevicesCollection.CreateDevices(null, info.ClassInfo);

            if (newDev.ShowConfigForm() == DialogResult.OK)
            {
                if (addedDevs == null)
                {
                    addedDevs = new List <IDevices>();
                }
                DevicesCollection.Add(newDev);
                newDev.CommandCompleted += DevicesCollection.commandCompleted;
                newDev.StateChanged     += DevicesCollection.stateChanged;
                ListViewAddItem(newDev);
            }
        }
コード例 #14
0
ファイル: CCCFiller.cs プロジェクト: qwdingyu/C-
        /// <summary>
        /// 从指定文件中读取需填报的参数值。
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        private TreeValue ReadData(string fileName)
        {
            TreeValue root         = InitTreeNode();
            Hashtable treeDir      = GetTreeDir(root);
            Hashtable current      = null;
            TreeValue lastTreeNode = root;
            Hashtable columnHeader = new Hashtable();

            using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(fileName))
            {
                reader.Open();
                Office.Excel.ForwardReadWorksheet sheet = reader.Activate(1) as Office.Excel.ForwardReadWorksheet;
                if (sheet != null)
                {
                    object header = null;
                    if (sheet.ReadNextRow() && sheet.CurrentRowIndex == 1)
                    {
                        while (sheet.ReadNextCell(false))
                        {
                            header = sheet.GetContent();
                            columnHeader.Add(sheet.CurrentCell.ColumnIndex, header == null ? "" : header.ToString());
                        }
                    }
                    FillValue3C fillValue = null;
                    object      content   = null;
                    string      str       = null;
                    bool        nextRow   = false;
                    while (sheet.ReadNextRow())
                    {
                        fillValue = new FillValue3C();
                        while (sheet.ReadNextCell(false))
                        {
                            content = sheet.GetContent();
                            str     = content == null ? "" : content.ToString();
                            switch (columnHeader[sheet.CurrentCell.ColumnIndex] as string)
                            {
                            case "序号":
                                fillValue.Key = str;
                                break;

                            case "参数项的值":
                                fillValue.SetValue(str);
                                break;

                            case "参数项名称":
                                str = str.Trim();
                                if (treeDir.ContainsKey(str))
                                {
                                    TreeValue parent = lastTreeNode;
                                    TreeValue child  = null;
                                    while (parent != null)
                                    {
                                        child = parent.FindChild(str, null);
                                        if (child == null)
                                        {
                                            parent = parent.Parent;
                                        }
                                        else
                                        {
                                            break;
                                        }
                                    }
                                    if (child == null)
                                    {
                                        child  = treeDir[str] as TreeValue;
                                        parent = child.Parent;
                                    }
                                    System.Diagnostics.Trace.Assert(child != null && parent != null);
                                    Match match = Main_3C.suffixMatcher.Match(fillValue.Key);
                                    if (match.Success)
                                    {
                                        string    suffix = match.Groups["suffix"].Value;
                                        TreeValue temp   = new TreeValue(child.Name, suffix);
                                        temp.CopyFrom(child);
                                        parent.AddChild(temp);
                                        child = temp;
                                    }
                                    current      = child.Values;
                                    lastTreeNode = child;
                                    nextRow      = true; // 当前行为目录行,忽略其它内容
                                }
                                break;

                            case "附件":
                                fillValue.AttachFile = str;
                                break;
                            }
                            if (nextRow)
                            {
                                break;
                            }
                        }
                        if (string.IsNullOrEmpty(fillValue.Key) == false)
                        {
                            if (nextRow)
                            {
                                nextRow = false;
                                continue;
                            }
                            if (current == null)
                            {
                                _data.Add(fillValue.Key, fillValue);
                            }
                            else
                            {
                                current.Add(fillValue.Key, fillValue);
                            }
                        }
                    }
                }
            }
            return(root);
        }
コード例 #15
0
ファイル: Default3CDataProvider.cs プロジェクト: qwdingyu/C-
        /// <summary>
        /// 从指定文件中读取需填报的参数值。
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        private TreeValue ReadData(string fileName, Hashtable data, Hashtable fillParameters)
        {
            try
            {
                TreeValue root         = InitTreeNode();
                Hashtable treeDir      = GetTreeDir(root);
                Hashtable current      = null;
                TreeValue lastTreeNode = root;
                Hashtable columnHeader = new Hashtable();
                using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(fileName))
                {
                    reader.Open();
                    Office.Excel.ForwardReadWorksheet sheet = reader.Activate(1) as Office.Excel.ForwardReadWorksheet;
                    if (sheet != null)
                    {
                        object header = null;
                        if (sheet.ReadNextRow() && sheet.CurrentRowIndex == 1)
                        {
                            while (sheet.ReadNextCell(false))
                            {
                                header = sheet.GetContent();
                                columnHeader.Add(sheet.CurrentCell.ColumnIndex, header == null ? "" : header.ToString());
                            }
                        }
                        FillValue3C fillValue = null;
                        object      content   = null;
                        string      str       = null;
                        bool        nextRow   = false;
                        while (sheet.ReadNextRow())
                        {
                            fillValue = new FillValue3C();
                            while (sheet.ReadNextCell(false))
                            {
                                content = sheet.GetContent();
                                str     = content == null ? "" : content.ToString();
                                switch (columnHeader[sheet.CurrentCell.ColumnIndex] as string)
                                {
                                case "序号":
                                    fillValue.Key = str;
                                    break;

                                case "参数项的值":
                                    fillValue.SetValue(string.Format("{0}{1}", string.IsNullOrEmpty(fillValue.Value) ? "" : string.Format("{0}\t", fillValue.Value), str));
                                    break;

                                case "参数项名称":
                                    Match match = paraNameMatcher.Match(str);
                                    if (match.Success && match.Groups["name"].Success)
                                    {
                                        str = match.Groups["name"].Value.Trim();
                                    }
                                    else
                                    {
                                        str = str.Trim();
                                    }
                                    if (treeDir.ContainsKey(str))
                                    {
                                        TreeValue parent = lastTreeNode;
                                        TreeValue child  = null;
                                        while (parent != null)
                                        {
                                            child = parent.FindChild(str, null);
                                            if (child == null)
                                            {
                                                parent = parent.Parent;
                                            }
                                            else
                                            {
                                                break;
                                            }
                                        }
                                        if (child == null)
                                        {
                                            child  = treeDir[str] as TreeValue;
                                            parent = child.Parent;
                                        }
                                        System.Diagnostics.Trace.Assert(child != null && parent != null);
                                        match = suffixMatcher.Match(fillValue.Key);
                                        if (match.Success)
                                        {
                                            string    suffix = match.Groups["suffix"].Value;
                                            TreeValue temp   = new TreeValue(child.Name, suffix);
                                            temp.CopyFrom(child);
                                            parent.AddChild(temp);
                                            child = temp;
                                        }
                                        current      = child.Values;
                                        lastTreeNode = child;
                                        nextRow      = true; // 当前行为目录行,忽略其它内容
                                    }
                                    break;

                                case "附件":
                                    fillValue.PublicAttachFile = str;
                                    break;
                                }
                                if (nextRow)
                                {
                                    break;
                                }
                            }
                            if (string.IsNullOrEmpty(fillValue.Key) == false)
                            {
                                if (nextRow)
                                {
                                    nextRow = false;
                                    continue;
                                }
                                AddFillValue(fillValue, lastTreeNode, current == null ? data : current);
                                //if (current == null)                                    //  若当前值为树节点下的值则将其添加到当前树节点的Values中,
                                //    _data.Add(fillValue.Key, fillValue);        //  否则(如证书名称、厂商关系)添加到管理器的数据中。
                                //else
                                //    current.Add(fillValue.Key, fillValue);
                            }
                        }
                    }
                }
                return(root);
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.StackTrace + ex.Message);
                throw;
            }
        }
コード例 #16
0
 public void DecomposeTree(AbstractTree parentNode, AbstractTree node, TreeBranch branch, TreePath path)
 {
     if (!path.IsAdded)
     {
         Possibilities.Add(path);
         path.IsAdded = true;
     }
     // Recursive browse
     if (node is TreeConnector) {
             TreeConnector treeConnector = (TreeConnector)node;
             if (treeConnector.Connection == "&")
             {
                 DecomposeTree(treeConnector, treeConnector.LeftTree, TreeBranch.Left, path);
                 DecomposeTree(treeConnector, treeConnector.RightTree, TreeBranch.Right, path);
             }
             else if (treeConnector.Connection == "|")
             {
                 // In this case, parentNode is a TreeOperator
                 if (parentNode != null)
                 {
                     // Left distribution
                     TreePath clonedPathLeftDistribution = (TreePath)path.Clone();
                     TreeConnector parentTreeConnectorLeftDistribution = (TreeConnector)parentNode.Clone();
                     // Right distribution
                     TreePath clonedPathRightDistribution = (TreePath)path.Clone();
                     TreeConnector parentTreeConnectorRightDistribution = (TreeConnector)parentNode.Clone();
                     if (branch == TreeBranch.Left)
                     {
                         parentTreeConnectorLeftDistribution.LeftTree = treeConnector.LeftTree;
                         parentTreeConnectorRightDistribution.LeftTree = treeConnector.RightTree;
                     }
                     else if (branch == TreeBranch.Right)
                     {
                         parentTreeConnectorLeftDistribution.RightTree = treeConnector.LeftTree;
                         parentTreeConnectorRightDistribution.RightTree = treeConnector.RightTree;
                     }
                     // Remove obsolete path
                     Possibilities.Remove(path);
                     // Browse recursively distributed tree ; the path must be different (by ref) if the parent operator is 'OR'
                     DecomposeTree(
                         parentTreeConnectorLeftDistribution,
                         parentTreeConnectorLeftDistribution.LeftTree,
                         TreeBranch.Left,
                         parentTreeConnectorLeftDistribution.Connection == "|"
                             ? (TreePath)clonedPathLeftDistribution.Clone()
                             : clonedPathLeftDistribution
                     );
                     DecomposeTree(
                         parentTreeConnectorLeftDistribution,
                         parentTreeConnectorLeftDistribution.RightTree,
                         TreeBranch.Right,
                         clonedPathLeftDistribution
                     );
                     DecomposeTree(
                         parentTreeConnectorRightDistribution,
                         parentTreeConnectorRightDistribution.LeftTree,
                         TreeBranch.Left,
                         parentTreeConnectorLeftDistribution.Connection == "|"
                             ? (TreePath)clonedPathRightDistribution.Clone()
                             : clonedPathRightDistribution
                     );
                     DecomposeTree(
                         parentTreeConnectorRightDistribution,
                         parentTreeConnectorRightDistribution.RightTree,
                         TreeBranch.Right,
                         clonedPathRightDistribution
                     );
                 }
                 // The operator is the root of the tree; we simply divide the path
                 else
                 {
                     TreePath clonedLeftPath = (TreePath)path.Clone();
                     TreePath clonedRightPath = (TreePath)path.Clone();
                     // Remove obsolete path
                     Possibilities.Remove(path);
                     DecomposeTree(treeConnector, treeConnector.LeftTree, TreeBranch.Left, clonedLeftPath);
                     DecomposeTree(treeConnector, treeConnector.RightTree, TreeBranch.Right, clonedRightPath);
                 }
             }
             break;
     }
     // Leaf
     else if (node is TreeValue) {
         TreeValue treeValue = (TreeValue)node;
         path.Add(treeValue);
     }
 }
コード例 #17
0
ファイル: CCCDataProvider.cs プロジェクト: qwdingyu/C-
        /// <summary>
        /// 数据验证
        /// </summary>
        /// <param name="value"></param>
        /// <param name="validator"></param>
        private bool Validate(string fileName, SHFYDataValidator validator, Hashtable specialParameters, int needAddedColumn, int lastValueColumnIndex)
        {
            bool      result       = true;
            TreeValue root         = InitTreeNode();
            Hashtable treeDir      = GetTreeDir(root);
            Hashtable columnHeader = new Hashtable();
            Hashtable startIndex   = new Hashtable();
            string    destFile     = string.Format("{0}\\{1}_{2}.xlsx", Path.GetDirectoryName(fileName), Path.GetFileNameWithoutExtension(fileName), DateTime.Now.ToString("MMddHHmmss"));

            File.Copy(fileName, destFile);
            XSSFWorkbook destWorkbook = null;

            using (FileStream destStream = new FileStream(destFile, FileMode.Open, FileAccess.Read))
            {
                destWorkbook = new XSSFWorkbook(destStream);
            }
            ISheet destSheet = destWorkbook.GetSheetAt(0);

            InsertColumn(lastValueColumnIndex, needAddedColumn, destSheet);

            IEnumerator rowEnumerator = destSheet.GetRowEnumerator();
            // 验证失败单元格格式
            ICellStyle abnormalStyle = CreateAbnormalStyle(destWorkbook);
            // 验证失败单元格同节点格式
            ICellStyle normalStyle = CreateNormalStyle(destWorkbook);

            if (rowEnumerator.MoveNext())
            {
                IRow destRow = destSheet.GetRow(0);
                for (int i = 0; i < needAddedColumn; i++)
                {
                    ICell cell = destRow.GetCell(lastValueColumnIndex + i + 1);
                    cell.SetCellValue(GetCellValue(destRow.GetCell(lastValueColumnIndex)));
                    CopyCell(destRow.GetCell(lastValueColumnIndex), cell, destWorkbook);
                }

                for (int columnIndex = destRow.FirstCellNum; columnIndex < destRow.LastCellNum - 1 && columnIndex <= lastValueColumnIndex + needAddedColumn; columnIndex++)
                {
                    ICell cell = destRow.GetCell(columnIndex);
                    columnHeader.Add(cell.ColumnIndex, cell == null ? "" : GetCellValue(cell));
                }
            }
            int    lastDirIndex = -1, appendColumn = lastValueColumnIndex, currentBufferIndex = 0;
            string key = "", value = "";

            string[]   buffer        = null;
            List <int> columnIndexes = new List <int>();

            while (rowEnumerator.MoveNext())
            {
                IRow        destRow        = rowEnumerator.Current as IRow;
                IEnumerator cellEnumerator = destRow.GetEnumerator();
                for (int columnIndex = destRow.FirstCellNum; columnIndex < destRow.LastCellNum - 1 && columnIndex <= lastValueColumnIndex + needAddedColumn; columnIndex++)
                {
                    ICell destCell = destRow.GetCell(columnIndex);
                    if (destCell == null)
                    {
                        continue;
                    }
                    switch (columnHeader[columnIndex] as string)
                    {
                    case "序号":
                        key = GetCellValue(destCell);
                        break;

                    case "参数项的值":
                        value = GetCellValue(destCell);
                        int  index   = 0;
                        bool flag    = false;
                        bool isTitle = false;
                        if (key != null && specialParameters.ContainsKey(key))
                        {
                            if (value.IndexOf(',') >= 0)
                            {
                                buffer = value.Split(',');
                            }
                            else if (value.IndexOf(',') >= 0)
                            {
                                buffer = value.Split(',');
                            }
                            else if (value.IndexOf(';') >= 0)
                            {
                                buffer = value.Split(';');
                            }
                            //if (buffer == null)
                            //    buffer = value.Split(',');
                            if (buffer != null && currentBufferIndex < buffer.Length)
                            {
                                columnIndexes.Add(destCell.ColumnIndex);
                                destCell.SetCellValue(buffer[currentBufferIndex]);
                                currentBufferIndex++;
                            }
                        }
                        flag = validator.IsValid(key, GetCellValue(destCell));
                        if (flag == false || validator.IsSpecial(key, GetCellValue(destCell)))
                        {
                            if (startIndex.Contains(destCell.ColumnIndex))
                            {
                                index   = (int)startIndex[destCell.ColumnIndex];
                                isTitle = false;
                            }
                            else
                            {
                                index   = lastDirIndex;
                                isTitle = true;
                            }
                            SetAbnormalCell(index, destCell.RowIndex, destCell.ColumnIndex, destSheet, abnormalStyle, normalStyle, isTitle);
                            startIndex[destCell.ColumnIndex] = destCell.RowIndex;
                        }
                        result = result && flag;
                        break;

                    case "参数项名称":
                        buffer = null;
                        string str   = GetCellValue(destCell);
                        Match  match = Default3CDataProvider.paraNameMatcher.Match(str);
                        if (match.Success && match.Groups["name"].Success)
                        {
                            str = match.Groups["name"].Value.Trim();
                        }
                        else
                        {
                            str = str.Trim();
                        }
                        if (treeDir.ContainsKey(str))
                        {
                            if (columnIndexes.Count > 1)
                            {
                                CopyCell(lastDirIndex, destCell.RowIndex, columnIndexes, destSheet);
                            }
                            columnIndexes.Clear();
                            lastDirIndex = destCell.RowIndex;
                            foreach (DictionaryEntry entry in startIndex)
                            {
                                SetAbnormalCell((int)entry.Value, lastDirIndex - 1, (int)entry.Key, destSheet, normalStyle, normalStyle, false);
                            }
                            startIndex.Clear();
                        }
                        currentBufferIndex = 0;
                        break;
                    }
                }
            }
            File.Delete(destFile);
            destFile = string.Format("{0}\\{3}_{1}_{2}.xlsx", Path.GetDirectoryName(fileName), Path.GetFileNameWithoutExtension(fileName), DateTime.Now.ToString("MMddHHmmss"), result ? "已验证" : "验证失败");
            using (FileStream fileStream = new FileStream(destFile, FileMode.OpenOrCreate, FileAccess.Write))
            {
                destWorkbook.Write(fileStream);
            }
            return(result);
        }
コード例 #18
0
ファイル: TypeReflection.cs プロジェクト: labeuze/source
        private TreeValue<TypeValueInfo> GetTreeValue(TreeOpe treeOpe)
        {
            TreeValue<TypeValueInfo> treeValue = new TreeValue<TypeValueInfo> { Index = _index, Value = _typeValueInfo, Level = _level, TreeOpe = treeOpe, Selected = false, Skip = false, Stop = false };

            TreeFilter treeFilter = TreeFilter.Select;
            if (_filter != null)
                treeFilter = _filter(_typeValueInfo);

            if ((treeFilter & TreeFilter.Stop) == TreeFilter.Stop)
            {
                treeValue.Stop = true;
            }

            else if ((treeFilter & TreeFilter.Skip) == TreeFilter.Skip)
            {
                treeValue.Skip = true;
            }

            else if ((treeFilter & TreeFilter.DontSelect) == 0)
            {
                treeValue.Selected = true;
            }
            return treeValue;
        }