/// <summary> /// 计算均分 /// </summary> /// <param name="dgv">数据视图</param> /// <param name="tb_Output">结果文本框</param> public static void CalcGPA(DataGridView dgv, TextBox tb_Output) { dgv.EndEdit(); double avg = 0; //均分 double total_credit = 0; //学分 foreach (DataGridViewRow row in dgv.Rows) { if (!row.IsNewRow) { double cur_credit = (double)row.Cells[1].Value; double cur_grade = (double)row.Cells[2].Value; total_credit += cur_credit; avg += cur_credit * cur_grade; } } avg = avg / total_credit; if (tb_Output.Text != null) { tb_Output.Text += "均分:" + Math.Round(avg, 2).ToString() + Environment.NewLine; tb_Output.Text += "GPA:" + GPA_CALC.Convert2GPA(avg) + Environment.NewLine; } }
public static void ImportExcel2DGV(DataGridView dgv) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Title = "选择待导入的数据文件"; ofd.Filter = "Excel Workbook 97-2003|*.xls|Excel Workbook|*.xlsx"; string filePath; if (ofd.ShowDialog() == DialogResult.OK) { filePath = Path.GetFullPath(ofd.FileName); FileStream fs; try { fs = new FileStream(filePath, FileMode.Open, FileAccess.Read); NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook(fs); int sheetCount = book.NumberOfSheets; for (int index = 0; index < sheetCount; index++) { NPOI.SS.UserModel.ISheet sheet = book.GetSheetAt(index); if (sheet == null) { continue; } NPOI.SS.UserModel.IRow row = sheet.GetRow(0); if (row == null) { continue; } int firstCellNum = row.FirstCellNum; int lastCellNum = row.LastCellNum; if (firstCellNum == lastCellNum || lastCellNum - firstCellNum < 2) { continue; } //MainForm.dataBindings.Clear(); //清空表中数据 //确定第一行是否是数据行 int count = 0; //记录表中数据字段的总数 int start_row = 0; for (int i = firstCellNum; i < lastCellNum; i++) { //if(row.GetCell(i) != null) //{ //row.GetCell(i).SetCellType(NPOI.SS.UserModel.CellType.String); if (GPA_CALC.isNum(row.GetCell(i).StringCellValue)) { count++; } //} } if (count == 0) { start_row = 1; } for (int i = start_row; i <= sheet.LastRowNum; i++) { string courseName = sheet.GetRow(i).Cells[0].StringCellValue; //MessageBox.Show(sheet.GetRow(i).Cells.Count.ToString()); double credit; double grade; try { sheet.GetRow(i).Cells[1].SetCellType(NPOI.SS.UserModel.CellType.String); sheet.GetRow(i).Cells[2].SetCellType(NPOI.SS.UserModel.CellType.String); credit = Convert.ToDouble(sheet.GetRow(i).Cells[1].StringCellValue); grade = Convert.ToDouble(sheet.GetRow(i).Cells[2].StringCellValue); } catch (Exception e) { MessageBox.Show(e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); credit = 0; grade = 0; } //MessageBox.Show(sheet.LastRowNum.ToString()); InfoVo info = new InfoVo() { CourseName = courseName, Credit = credit, Grade = grade }; //原创的处理InvalidOperationException的方法,当选中新行时会触发使得dataBinding添加异常的一行 if (dgv.CurrentRow != null && dgv.CurrentRow.IsNewRow)//别缺少前面的条件了,否则NRE { MainForm.dataBindings.RemoveAt(MainForm.dataBindings.Count - 1); } //dgv.ClearSelection(); MainForm.dataBindings.Add(info); } } fs.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } }