Ejemplo n.º 1
0
        /// <summary>
        /// 对每个数据区的cell进行数据检查
        /// </summary>
        /// <returns>0:无数据 1:检查有错误 2:检查无错误</returns>
        public int DataValidChecking()
        {
            dataGridView2.Rows.Clear();

            // 有效行数
            int Rows = ws.UsedRange.Rows.Count;
            // 有效列数
            int Columns = ws.UsedRange.Columns.Count;
            if (Rows < 2 || Columns < 1)
            {
                // 无数据
                return 0;
            }
            object[,] FieldData = null;
            if (Rows == 2 && Columns == 1)
            {
                // 一格数据处理
                string SingleData = ws.Range["A2", ws.Cells[Rows, Columns]].Value2.ToString();
                FieldData = new object[1, 1];
                FieldData[0, 0] = SingleData;
            }
            else
            {
                // 读取数据区(不包括第一行)
                FieldData = ws.Range["A2", ws.Cells[Rows, Columns]].Value2;
            }
            // 行坐标(不包括第一行,起始行号从2开始)
            Dictionary<PrimaryKeyValues, PKValueCellData> PkData = new Dictionary<PrimaryKeyValues, PKValueCellData>();
            int RowX = 2;
            // 列坐标
            int ColY = 1;
            PrimaryKeyValues RowData = PrimaryKeyValues.CreateInstance();
            bool boolValue = false;
            foreach (var value in FieldData)
            {
                // 换行
                if (ColY > Columns)
                {
                    RowX++;
                    ColY = 1;
                }
                var cells = this.dataGridView1.Rows[ColY - 1].Cells;

                // 主键处理
                bool.TryParse(cells[5].Value.ToString(), out boolValue);
                if (boolValue)
                {
                    //// 主键列
                    //if (RowData == null)
                    //{
                    //    RowData = new RowPrimaryKeyData();
                    //    RowData.RowX = RowX;
                    //}
                    RowData.PkValues.Add(value == null ? "" : value);
                }
                if (ColY == Columns)
                {
                    // 主键重复检查
                    PKValueCellData TempValue;
                    if (true == PkData.TryGetValue(RowData, out TempValue))
                    {
                        // 重复主键
                        TempValue.CellDataList.Add(RowX);
                    }
                    else
                    {
                        var pkValueCellData = new PKValueCellData();
                        pkValueCellData.CellDataList.Add(RowX);
                        PkData.Add(RowData, pkValueCellData);
                    }
                    RowData = PrimaryKeyValues.CreateInstance();
                }

                if (null == value)
                {
                    ColY++;
                    continue;
                }

                int minValue;
                int.TryParse(cells[2].Value.ToString(), out minValue);
                int maxValue;
                int.TryParse(cells[3].Value.ToString(), out maxValue);
                // 类型检查
                switch ((DesignerDataType)cells[1].Value)
                {
                    case DesignerDataType.Int:
                        {
                            int intValue = 0;
                            if (!int.TryParse(value.ToString(), out intValue))
                            {
                                AddTypeError(new TypeErrorCellData() { RowX = RowX, ColY = ColY, ColumnName = cells[0].Value.ToString(), Type = DesignerDataType.Int });
                            }
                            else
                            {
                                // 范围检查
                                if (intValue < minValue || intValue > maxValue)
                                {
                                    AddOutofRangeError(new RangeErrorCellData() { RowX = RowX, ColY = ColY, Min = minValue, Max = maxValue });
                                }
                            }
                        }
                        break;
                    case DesignerDataType.Float:
                        {
                            float floatValue = 0;
                            if (!float.TryParse(value.ToString(), out floatValue))
                            {
                                AddTypeError(new TypeErrorCellData() { RowX = RowX, ColY = ColY, ColumnName = cells[0].ToString(), Type = DesignerDataType.Float });
                            }
                            else
                            {
                                // 范围检查
                                if (floatValue < minValue || floatValue > maxValue)
                                {
                                    AddOutofRangeError(new RangeErrorCellData() { RowX = RowX, ColY = ColY, Min = minValue, Max = maxValue });
                                }
                            }
                        }
                        break;
                }

                ColY++;
            }

            foreach (var pkValuesData in PkData.Values)
            {
                if (pkValuesData.CellDataList.Count > 1)
                {
                    int i = dataGridView2.Rows.Add(Resources.PKValueRepeat, string.Format(Resources.PKValueRepeatInfo, string.Join(",", pkValuesData.CellDataList)));
                    dataGridView2.Rows[i].Tag = pkValuesData;
                }
            }

            if (dataGridView2.Rows.Count > 0)
                return 1;
            return 2;
        }
Ejemplo n.º 2
0
        private void NavigateToCell(int row, int col)
        {
            var gridRow = dataGridView2.Rows[row];
            if (gridRow.Tag is PKValueCellData)
            {
                var errorData = gridRow.Tag as PKValueCellData;
                currentPKValueCellData = errorData;

                SelectRowByIndex(errorData.Current);
            }
            else
            {
                currentPKValueCellData = null;
                if (gridRow.Tag is TypeErrorCellData)
                {
                    var errorData = gridRow.Tag as TypeErrorCellData;
                    ws.Cells[errorData.RowX, errorData.ColY].Select();
                }
                else if (gridRow.Tag is RangeErrorCellData)
                {
                    var errorData = gridRow.Tag as RangeErrorCellData;
                    ws.Cells[errorData.RowX, errorData.ColY].Select();
                }
            }
            EnableButtons();
        }