/// <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; }
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(); }