protected override bool getRecords(out List <ProductCirculationRecord> records) { records = new List <ProductCirculationRecord>(); int number = this.dataGridView1.RowCount; double num, price, totalPrice, quantityPerPiece; int pieces; bool isQuantityNull = false, isPiecesNull = false; string unit, comment; bool isInputCorrect = true; foreach (DataGridViewRow row in this.dataGridView1.Rows) { object productID = null; int ID = 0; if (ValidateUtility.getLookupValue(row.Cells["product"], out productID) == false || ValidateUtility.getInt(row.Cells["ID"], false, true, out ID) == false || ValidateUtility.getDouble(row.Cells["quantityPerPiece"], false, true, out quantityPerPiece, out isQuantityNull) == false || ValidateUtility.getInt(row.Cells["pieces"], false, true, out pieces, out isPiecesNull) == false || ValidateUtility.getDouble(row.Cells["num"], true, true, out num) == false || ValidateUtility.getString(row.Cells["unit"], false, out unit) == false || ValidateUtility.getDouble(row.Cells["price"], out price) == false || ValidateUtility.getDouble(row.Cells["totalPrice"], out totalPrice) == false || ValidateUtility.getString(row.Cells["comment"], false, out comment) == false) { return(false); } ProductStainlessCirculationRecord record = new ProductStainlessCirculationRecord(); LookupArg arg = ((row.Cells["product"] as DataGridViewLookupCell).EditedValue as LookupArg); record.ProductID = (int)arg.Value; record.ProductName = arg.Text; record.ID = ID; string serial; ValidateUtility.getString(row.Cells["serial"], false, out serial); record.Serial = serial; record.QuantityPerPiece = quantityPerPiece; record.QuantityNull = isQuantityNull; record.Pieces = pieces; record.PiecesNull = isPiecesNull; record.TotalNum = num; record.Unit = unit; record.Price = price; record.TotalPrice = totalPrice; record.Comment = comment; records.Add(record); } return(isInputCorrect); }