コード例 #1
0
ファイル: UserRepository.cs プロジェクト: john20xdoe/MIS
            public static string ValidateUsername(IDbConnection connection, string username, Int32?existingUserId)
            {
                username = username.TrimToNull();

                if (username == null)
                {
                    throw DataValidation.RequiredError(fld.Username.Name, fld.Username.Title);
                }

                if (!IsValidUsername(username))
                {
                    throw new ValidationError("InvalidUsername", "Username",
                                              "Usernames should start with letters, only contain letters and numbers!");
                }

                var existing = GetUser(connection,
                                       new Criteria(fld.Username) == username |
                                       new Criteria(fld.Username) == username.Replace('I', 'İ'));

                if (existing != null && existingUserId != existing.UserId)
                {
                    throw new ValidationError("UniqueViolation", "Username",
                                              "A user with same name exists. Please choose another!");
                }

                return(username);
            }
コード例 #2
0
        private void txtFinalQty_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {
                if (e.KeyCode == Keys.Enter)
                {
                    if (DataValidation.IsNumericNumber(txtFinalQty.Text))
                    {
                        objBatchActivity.StopQty = Convert.ToInt32(txtFinalQty.Text);

                        if (objBatchActivity.MainActivity.MainActivityTitle == "Packing_Secondary")
                        {
                            objBatchActivity.BatchActStatus = BatchActivity.Status.SecondaryPacking_Finish;
                        }
                        else
                        {
                            objBatchActivity.BatchActStatus = BatchActivity.Status.Finished;
                        }

                        long x = objBatchActivity_DL.Update(objBatchActivity);
                    }
                    else
                    {
                        MessageBox.Show(this, "Please Enter a Valid Qty", "Wrong Attempt", MessageBoxButtons.OK);
                    }

                    this.Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
        }
コード例 #3
0
        private void btnBasicAdd_Click(object sender, EventArgs e)
        {
            FormulaBasicProduct objFormulaBasicProduct = new FormulaBasicProduct();

            try
            {
                if (cmbBasicProducts.Items.Count > 0 && DataValidation.Is3DecimalPointNumber(txtBasicProductQty.Text))
                {
                    objFormulaBasicProduct.BasicProduct      = objBasicProductDL.Get(cmbBasicProducts.SelectedValue.ToString());
                    objFormulaBasicProduct.Formula           = objFormula;
                    objFormulaBasicProduct.FormulaPart       = cmbBasicPart.SelectedItem.ToString();
                    objFormulaBasicProduct.FormulaProductQty = Convert.ToDecimal(txtBasicProductQty.Text);

                    objFormulaBasicProductDL.Add(objFormulaBasicProduct, CurrentUser.UserEmp);
                    bindBasicProduct.DataSource = objFormulaBasicProductDL.GetDataView_FormulaID(objFormula.FormulaID);
                    bindItemList.DataSource     = objFormulaDL.GetDataView_Items(objFormula.FormulaID);
                }
                else
                {
                    MessageBox.Show(this, "Quantity should be a Numaric value", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (FormatException fex)
            {
                MessageBox.Show(this, "Quantity should be a Numaric value", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                objFormulaBasicProduct = null;
            }
        }
コード例 #4
0
        private void btnFinalize_Click(object sender, EventArgs e)
        {
            if (DataValidation.Is3DecimalPointNumber(txtDamagedQty.Text) && DataValidation.Is3DecimalPointNumber(txtBatchUsed.Text))
            {
                try
                {
                    BatchPackingMR   obj = new BatchPackingMR();
                    BatchActivity    objBatchActivity    = new BatchActivity();
                    BatchActivity_DL objBatchActivity_DL = new BatchActivity_DL(ConnectionStringClass.GetConnection());

                    obj = objBatchPackingMR_DL.Get(Convert.ToInt64(cmbMRNO.SelectedValue));

                    objBatchActivity = objBatchActivity_DL.GetByID(Convert.ToInt32(txtPackingBatch.Text));

                    if ((objBatchActivity.BatchActStatus == BatchActivity.Status.Finished) | (objBatchActivity.BatchActStatus == BatchActivity.Status.SecondaryPacking_Finish) | (objBatchActivity.BatchActStatus == BatchActivity.Status.Transferred))
                    {
                        MessageBox.Show("Activity is Already Finished");
                    }
                    else
                    {
                        if (obj.StartQty >= Convert.ToDecimal(txtDamagedQty.Text) + Convert.ToDecimal(txtBatchReturned.Text) + Convert.ToDecimal(txtBatchUsed.Text))
                        {
                            obj.BatchID        = BatchID;
                            obj.BatchDamaged   = Convert.ToDecimal(txtDamagedQty.Text);
                            obj.BatchReturned  = Convert.ToDecimal(txtBatchReturned.Text);
                            obj.BatchUsed      = Convert.ToDecimal(txtBatchUsed.Text);
                            obj.State          = 1;
                            obj.BatchPackingID = Convert.ToInt64(txtPackingBatch.Text);


                            objBatchPackingMR_DL.Update(obj, MTN.Status.Initial, MTN.Type.Reject, MTN.ItemType.Material, CurrentUser.EmployeeID);
                        }
                        else
                        {
                            MessageBox.Show("Invalid Qty");
                        }
                    }

                    Load_MRList();

                    cmbMRNO_SelectedIndexChanged(sender, e);

                    txtBatchReturned.Text = "";
                    txtBatchUsed.Text     = "";
                    txtDamagedQty.Text    = "";

                    txtBatchUsed.Select();
                    loadSectionData();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
            else
            {
                MessageBox.Show(this, "please enter valid quantity", "MRP System", MessageBoxButtons.OK);
            }
        }
コード例 #5
0
        /// <summary>
        /// Incrementally resizes text until it fits within the mealplan
        /// </summary>
        private void SetMealPlanTextSize()
        {
            try
            {
                List <StackPanel> days        = new List <StackPanel>();
                double            totalHeight = 0;
                StackPanelMealPlan.UpdateLayout();
                foreach (var item in StackPanelMealPlan.Children)
                {
                    if (item.GetType() == typeof(StackPanel))
                    {
                        StackPanel sp = (StackPanel)item;
                        totalHeight += sp.ActualHeight;
                        days.Add(sp);
                        //Day
                        TextBlock tb = sp.Children[0] as TextBlock;
                        tb.FontSize          = TBlockAdminMessage.FontSize + 5;
                        tb.VerticalAlignment = VerticalAlignment.Center;
                        tb.UpdateLayout();
                        //Meal
                        tb                   = sp.Children[1] as TextBlock;
                        tb.FontSize          = TBlockAdminMessage.FontSize;
                        tb.VerticalAlignment = VerticalAlignment.Center;
                        tb.UpdateLayout();
                        //Width
                        while (tb.IsTextTrimmed && tb.FontSize > 10)
                        {
                            tb.FontSize--;
                            tb.UpdateLayout();
                        }
                    }
                }

                while (totalHeight > StackPanelMealPlan.MaxHeight)
                {
                    totalHeight = 0;
                    //Height
                    foreach (StackPanel item in days)
                    {
                        TextBlock tbDay  = (TextBlock)item.Children[0];
                        TextBlock tbMeal = (TextBlock)item.Children[1];
                        tbMeal.TextTrimming = TextTrimming.CharacterEllipsis;

                        if (tbMeal.FontSize > 10 && tbDay.FontSize > 10)
                        {
                            tbMeal.FontSize--;
                            tbDay.FontSize--;
                            tbMeal.UpdateLayout();
                            tbDay.UpdateLayout();
                            totalHeight += item.ActualHeight;
                        }
                    }
                }
            }
            catch (Exception error)
            {
                DataValidation.SaveError(error.ToString());
            }
        }
コード例 #6
0
        private void ConfirmButton_Click(object sender, EventArgs e)
        {
            string dni         = dniTextBox.Text;
            string name        = nameTextBox.Text;
            string surname     = lastnameTextBox.Text;
            string district    = districtTextBox.Text;
            string email       = emailTextBox.Text;
            string phoneNumber = phoneTextBox.Text;

            bool flagOK = true;

            if (!DataValidation.ValidField(Constants.DniRegex, dni, ref flagOK))
            {
                label4.ForeColor = Color.Red;
            }
            if (!DataValidation.ValidField(Constants.NameRegex, name, ref flagOK))
            {
                label6.ForeColor = Color.Red;
            }
            if (!DataValidation.ValidField(Constants.SurnameRegex, surname, ref flagOK))
            {
                label8.ForeColor = Color.Red;
            }
            if (!DataValidation.ValidField(Constants.PlaceRegex, district, ref flagOK))
            {
                label5.ForeColor = Color.Red;
            }
            if (!DataValidation.ValidField(Constants.PhoneRegex, phoneNumber, ref flagOK))
            {
                label7.ForeColor = Color.Red;
            }
            if (!DataValidation.ValidField(Constants.EmailRegex, email, ref flagOK))
            {
                label10.ForeColor = Color.Red;
            }

            if (flagOK)
            {
                NaturalClient nc = new NaturalClient();
                nc.Dni = dni; nc.Name = name; nc.Surname = surname; nc.Address = district; nc.Email = email; nc.PhoneNumber = phoneNumber;
                try {
                    naturalClientBL.addNaturalClient(nc);
                    MessageBox.Show("El cliente ha sido registrado", "Registro de cliente nuevo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    dniTextBox.Clear();
                    nameTextBox.Clear();
                    lastnameTextBox.Clear();
                    districtTextBox.Clear();
                    emailTextBox.Clear();
                    phoneTextBox.Clear();
                }
                catch (Exception ex) {
                    MessageBox.Show("¡Existe un cliente con el mismo DNI!", "Error al añadir cliente", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                MessageBox.Show("Uno o más campos son incorrectos. Revise los campos en rojo.", "Error en registro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
コード例 #7
0
        public void DataValidation_ValidateComposite_InValidComposite(long number)
        {
            //Act
            var actual = DataValidation.ValidateComposite(number);

            // Assert
            Assert.False(actual);
        }
コード例 #8
0
        public void DataValidation_ValidateInput_LongOverFlow(long number)
        {
            // Act
            var actual = DataValidation.ValidateInput((number + 1).ToString());

            // Assert
            Assert.False(actual);
        }
コード例 #9
0
        public void DataValidation_ValidateInput_BadFormat()
        {
            // Act
            var actual = DataValidation.ValidateInput("27.7");

            // Assert
            Assert.False(actual);
        }
コード例 #10
0
        public void DataValidation_ValidateInput_NoEntry()
        {
            // Act
            var actual = DataValidation.ValidateInput(null);

            // Assert
            Assert.False(actual);
        }
コード例 #11
0
        private void ConfirmButton_Click(object sender, RoutedEventArgs e)
        {
            //votes(voteId INTEGER PRIMARY KEY, studentId INTEGER, upvotes BOOLEAN, description TEXT, creationDate INTEGER)
            string   lastname         = _lastnameTextBox.Text;
            string   surname          = _surnameTextBox.Text;
            int      studentId        = Database.Get.Student.IdFromName(lastname, surname);
            string   description      = _descriptionTextBox.Text;
            DateTime currentDateTime  = DateTime.Now;
            int      currentTimestamp = (int)new DateTimeOffset(currentDateTime).ToUnixTimeSeconds();

            string valid = DataValidation.Vote(lastname, surname, description);

            if (valid != "valid")
            {
                error.Foreground = new SolidColorBrush(Colors.Red);
                error.Content    = valid;
                return;
            }



            error.Foreground = new SolidColorBrush(Colors.Green);
            string upvoteType = upvote ? "Upvote" : "Downvote";

            error.Content = $"{upvoteType} ajouté avec succès à {currentDateTime:hh:mm:ss}";
            if (studentDisplay != null)
            {
                if (upvote)
                {
                    int currentUpvote = int.Parse(studentDisplay.UpvotesCount);
                    currentUpvote++;
                    studentDisplay.UpvotesCount = currentUpvote.ToString();
                }
                else
                {
                    int currentDownvote = int.Parse(studentDisplay.DownvotesCount);
                    currentDownvote++;
                    studentDisplay.DownvotesCount = currentDownvote.ToString();
                }
            }
            else
            {
                Students.StudentDetails.VotesDetails.VoteDetails vote = new Students.StudentDetails.VotesDetails.VoteDetails()
                {
                    Content = description,
                    ID      = this.studentId,
                    Date    = currentDateTime.ToString("g", GlobalVariable.culture)
                };
                if (upvote)
                {
                    Students.StudentDetails.VotesDetails.UpvoteList.Add(vote);
                }
                else
                {
                    Students.StudentDetails.VotesDetails.DownvoteList.Add(vote);
                }
            }
        }
コード例 #12
0
ファイル: Register_Room.cs プロジェクト: BartekRybak/ShadeMsg
        public override void Show()
        {
            Console.WriteLine("Welcome in ShadeMSG now u can create a free account");
            string nick = Input("Nick: ");

            Console.WriteLine("It will not be possible to change your password in the future");
            string password = Input("Password: "******"Check nick lenght Min:" + minLenghtNick + " Max:" + maxLenghtNick);
            }
            if (!DataValidation.CheckLenght(password, minLenghtPassword, maxLenghtPassword))
            {
                validationErrors.Add("Check password lenght Min:" + minLenghtPassword + " Max:" + maxLenghtPassword);
            }
            if (DataValidation.RegexCheck(nick, "[^A-Za-z0-9_.]"))
            {
                validationErrors.Add("Nick have illegal characters, use only letters and numbers.");
            }
            if (DataValidation.RegexCheck(password, "[^A-Za-z0-9_.]"))
            {
                validationErrors.Add("Password have illegal characters, use only letters and numbers.");
            }

            if (validationErrors.Count > 0)
            {
                foreach (string error in validationErrors)
                {
                    Console.WriteLine(error, Color.Tomato);
                }
                return;
            }

            Packet reg_packet = new Packet()
            {
                name = "register", args = new Argument[] {
                    new Argument("nick", nick),
                    new Argument("password", password)
                }
            };

            Console.WriteLine("Creating Account..");

            client.Send(reg_packet);
            responseCatcher = new ResponseCatcher(reg_packet);
            responseCatcher.PacketCaught += ResponseCatcher_PacketCaught;
            while (!responseCatcher.packetWasCaught)
            {
                Thread.Sleep(100);
            }
        }
コード例 #13
0
        private void button1_Click_1(object sender, EventArgs e)
        {
            string companyName = textBox2.Text;
            string address     = textBox4.Text;
            string phoneNumber = textBox5.Text;
            string email       = textBox6.Text;

            bool flagOK = true;

            if (!DataValidation.ValidField(Constants.CompanyNameRegex, companyName, ref flagOK))
            {
                namesCheckBox.ForeColor = Color.Red;
            }
            if (!DataValidation.ValidField(Constants.PlaceRegex, address, ref flagOK))
            {
                districtCheckBox.ForeColor = Color.Red;
            }
            if (!DataValidation.ValidField(Constants.PhoneRegex, phoneNumber, ref flagOK))
            {
                phoneCheckBox.ForeColor = Color.Red;
            }
            if (!DataValidation.ValidField(Constants.EmailRegex, email, ref flagOK))
            {
                emailCheckBox.ForeColor = Color.Red;
            }

            if (flagOK)
            {
                DialogResult result;
                result = MessageBox.Show("¿Esta Seguro de que desea cambiar el/los campo(s)?", "Cambio de cmapos de cliente", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (result == System.Windows.Forms.DialogResult.Yes)
                {
                    if (namesCheckBox.Checked)
                    {
                        selectedClient.CompanyName = companyName;
                    }
                    if (districtCheckBox.Checked)
                    {
                        selectedClient.Address = address;
                    }
                    if (phoneCheckBox.Checked)
                    {
                        selectedClient.PhoneNumber = phoneNumber;
                    }
                    if (emailCheckBox.Checked)
                    {
                        selectedClient.Email = email;
                    }
                    legalClientBL.updateLegalClient(selectedClient);
                    MessageBox.Show("Se modifico al cliente", "Modificacion completada", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.Close();
                }
            }
            else
            {
                MessageBox.Show("Uno o más campos son incorrectos. Revise los campos en rojo.", "Error en registro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
コード例 #14
0
        public string this[string columnName]
        {
            get
            {
                string message = string.Empty;

                switch (columnName)
                {
                case "Name":
                    if (!DataValidation.ValidateString(Name))
                    {
                        message = "NAME should be only letters and 3-15 symbols";
                    }
                    break;

                case "Surname":
                    if (!DataValidation.ValidateString(Surname))
                    {
                        message = "SURNAME should be only letters and 3-15 symbols";
                    }
                    break;

                case "Nickname":
                    if (!DataValidation.ValidateString(Nickname))
                    {
                        message = "NICKNAME should be only letters and 3-15 symbols";
                    }
                    break;

                case "Number":
                    if (!DataValidation.ValidateNumber(Number))
                    {
                        message = "NUMBER should be XXX-XXX-XXXX format";
                    }
                    break;

                case "Password":
                    if (!DataValidation.ValidatePassword(Password))
                    {
                        message = "Password should be 3-15 symbols, " +
                                  "uppercase and lowercase letter and number";
                    }
                    break;

                case "ConfirmPassword":
                    if (!DataValidation.ValidateConfirmation(Password, ConfirmPassword))
                    {
                        message = "Passwords Do Not Match";
                    }
                    break;
                }
                Validated = DataValidation.ValidateString(Name) && DataValidation.ValidateString(Surname) &&
                            DataValidation.ValidateString(Nickname) && DataValidation.ValidateNumber(Number) &&
                            DataValidation.ValidatePassword(Password) &&
                            DataValidation.ValidateConfirmation(Password, ConfirmPassword);
                return(message);
            }
        }
コード例 #15
0
        public RequestResult InsertOperationMechanisms(
            OperationInfo OperationInfo,
            List <Files> Files
            )
        {
            try
            {
                /// Data Validations
                DataValidation.IsEmptyOrDefault2(OperationInfo);
                DataValidation.IsEmptyOrDefault2(OperationInfo.CheckedData);
                DataValidation.IsEmptyOrDefault2(OperationInfo.ManagersInfo);
                DataValidation.IsEmptyOrDefaultList2(Files);

                //if (DataValidation.IsEmptyOrDefault(OperationInfo) ||
                //    DataValidation.IsEmptyOrDefault(OperationInfo.CheckedData) ||
                //    DataValidation.IsEmptyOrDefault(OperationInfo.ManagersInfo) ||
                //    DataValidation.IsEmptyOrDefaultList(Files))
                //    throw new FaultException<ValidationFault>(new ValidationFault());


                /// Call Database
                using (CooperativeDAL dal = new CooperativeDAL(new ADO()))
                {
                    return(dal.InsertOperationMechanismsDAL(
                               OperationInfo,
                               Files
                               ));
                }
            }
            catch (FaultException <ValidationFault> flex)
            {
                //ValidationFault fault = new ValidationFault
                //{
                //    Result = true,
                //    Message = "Parameter not correct",
                //    Description = "Invalid Parameters is Required but have null or empty or 0 value"
                //};

                //var flex = new FaultException<ValidationFault>(fault, new FaultReason("Invalid Parameters is Required but have null or empty or 0 value"));

                _log.Error(flex);

                throw flex;
            }
            catch (Exception ex)
            {
                ValidationFault fault = new ValidationFault
                {
                    Result      = false,
                    Message     = ex.Message,
                    Description = "Service have an internal error please contact service administartor [email protected]"
                };

                _log.Error(ex);

                throw new FaultException <ValidationFault>(fault);
            }
        }
コード例 #16
0
        public void CheckWeightTest_EquivalentNumber59_ReturnFalse()
        {
            DataValidation dataValidation = new DataValidation();
            bool           factResult;
            int            number = 59;

            factResult = dataValidation.CheckWeight(number);
            Assert.IsFalse(factResult);
        }
コード例 #17
0
        public void CheckLenghtPasswordTest_StringLenght35_ReturnFalse()
        {
            DataValidation dataValidation = new DataValidation();
            bool           factResult;
            string         s1 = "abcdefghijklmnopqrstuvwxyzaylhecotl";

            factResult = dataValidation.CheckLenghtPassword(s1);
            Assert.IsFalse(factResult);
        }
コード例 #18
0
ファイル: MainForm.cs プロジェクト: wpmyj/CBZN_Tool
 private void PortDataReceived(int port)
 {
     Thread.Sleep(20);
     try
     {
         int len = _mPort.GetBytesToRead();
         if (len == 0)
         {
             return;
         }
         byte[] by = new byte[len];
         _mPort.Read(by, len);
         List <byte[]> bylist = DataValidation.Validation(by);
         foreach (byte[] item in bylist)
         {
             if (item == null)
             {
                 continue;
             }
             ParsingParameter parameter = DataParsing.ParsingContent(item);
             if (parameter.FunctionAddress == 50)
             {
                 if (parameter.Command == 1)
                 {
                     long number = DataParsing.TemporaryContent(parameter.DataContent);
                     if (number == 1)
                     {
                         if (_currentNumber >= _mNumber.Number)
                         {
                             _mNumber.Number = _currentNumber;
                             if (_mNumber.Mid > 0)
                             {
                                 DbHelper.Db.Update <ModuleNumber>(_mNumber);
                             }
                             else
                             {
                                 _mNumber.Mid = DbHelper.Db.Insert <ModuleNumber>(_mNumber);
                             }
                         }
                         EnableDownLoadControls(false);
                         return;
                     }
                     else
                     {
                         EnableDownLoadControls(true);
                         return;
                     }
                 }
             }
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message + ex.StackTrace, @"提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
     EnableDownLoadControls(true);
 }
コード例 #19
0
        public void CheckVolumeTest_EquivalentNumber193_ReturnFalse()
        {
            DataValidation dataValidation = new DataValidation();
            bool           factResult;
            int            number = 193;

            factResult = dataValidation.CheckVolume(number);
            Assert.IsFalse(factResult);
        }
コード例 #20
0
        public void CheckLenghtPasswordTest_StringLenght2_ReturnFalse()
        {
            DataValidation dataValidation = new DataValidation();
            bool           factResult;
            string         s1 = "ab";

            factResult = dataValidation.CheckLenghtPassword(s1);
            Assert.IsFalse(factResult);
        }
コード例 #21
0
        public void CheckWeightTest_EquivalentNumber32_ReturnTrue()
        {
            DataValidation dataValidation = new DataValidation();
            bool           factResult;
            int            number = 32;

            factResult = dataValidation.CheckWeight(number);
            Assert.IsTrue(factResult);
        }
コード例 #22
0
        public void CheckVolumeTest_LimitNumber121_ReturnFalse()
        {
            DataValidation dataValidation = new DataValidation();
            bool           factResult;
            int            number = 121;

            factResult = dataValidation.CheckVolume(number);
            Assert.IsFalse(factResult);
        }
コード例 #23
0
        public void CheckVolumeTest_EquivalentNumber35_ReturnTrue()
        {
            DataValidation dataValidation = new DataValidation();
            bool           factResult;
            int            number = 35;

            factResult = dataValidation.CheckVolume(number);
            Assert.IsTrue(factResult);
        }
コード例 #24
0
        public void SavePersuitData()
        {
            DataBaseWorker.SavePursuitData(JsonConvert.SerializeObject(this), Program.datosCompartidos.activeUser, LookAndPlayForm.Program.datosCompartidos.startTimeTest);

            string path = DataConverter.OldTypeDirectory(Program.datosCompartidos.startTimeTest, Program.datosCompartidos.activeUser);

            DataValidation.CheckDirectoryPath(path, true, FileAttributes.Hidden);
            File.WriteAllText(path + @"\persuitData.json", JsonConvert.SerializeObject(this));
        }
コード例 #25
0
        public static string ValidateDisplayName(IDbConnection connection, string displayName, Int32? existingUserId)
        {
            displayName = displayName.TrimToNull();

            if (displayName == null)
                throw DataValidation.RequiredError(fld.DisplayName.Name, fld.DisplayName.Title);

            return displayName;
        }
コード例 #26
0
        public void CheckLenghtPasswordTest_StringLenght14_ReturnTrue()
        {
            DataValidation dataValidation = new DataValidation();
            bool           factResult;
            string         s1 = "abcdefghijklmn";

            factResult = dataValidation.CheckLenghtPassword(s1);
            Assert.IsTrue(factResult);
        }
コード例 #27
0
        public void CheckWeightTest_LimitNumber0_ReturnFalse()
        {
            DataValidation dataValidation = new DataValidation();
            bool           factResult;
            int            number = 0;

            factResult = dataValidation.CheckWeight(number);
            Assert.IsFalse(factResult);
        }
コード例 #28
0
        public string DoWork(
            testc c
            )
        {
            DataValidation.IsEmptyOrDefault2(c);
            DataValidation.IsEmptyOrDefault2(c);

            return("NA");
        }
コード例 #29
0
        // Обновляет свойства окружности
        public override void Update(AutocadObject obj)
        {
            var circle = (PrimitiveCircle)obj;

            this.Radius = DataValidation.ValidRadius(circle.Radius, this.Radius);
            this.Center = circle.Center;
            this.Height = circle.Height;
            OnPropertyChanged("Display");
        }
コード例 #30
0
        private void btnSave_Click(object sender, EventArgs e)
        {
            if ((dgvWIP.CurrentRow != null) && DataValidation.IsNumericNumber(txtFinalQty.Text))
            {
                objBatchActivity_DL.Update_FinalQty_WIP(Convert.ToDecimal(txtFinalQty.Text), Convert.ToInt32(dgvWIP.CurrentRow.Cells["PackingBatchID"].Value));

                Load_WIP();
            }
        }
コード例 #31
0
        internal void FromDataValidation(DataValidation dv)
        {
            this.SetAllNull();

            if (dv.Formula1 != null) this.Formula1 = dv.Formula1.Text;
            if (dv.Formula2 != null) this.Formula2 = dv.Formula2.Text;

            if (dv.Type != null) this.Type = dv.Type.Value;
            if (dv.ErrorStyle != null) this.ErrorStyle = dv.ErrorStyle.Value;
            if (dv.ImeMode != null) this.ImeMode = dv.ImeMode.Value;
            if (dv.Operator != null) this.Operator = dv.Operator.Value;
            if (dv.AllowBlank != null) this.AllowBlank = dv.AllowBlank.Value;
            if (dv.ShowDropDown != null) this.ShowDropDown = dv.ShowDropDown.Value;
            if (dv.ShowInputMessage != null) this.ShowInputMessage = dv.ShowInputMessage.Value;
            if (dv.ShowErrorMessage != null) this.ShowErrorMessage = dv.ShowErrorMessage.Value;

            if (dv.ErrorTitle != null) this.ErrorTitle = dv.ErrorTitle.Value;
            if (dv.Error != null) this.Error = dv.Error.Value;
            if (dv.PromptTitle != null) this.PromptTitle = dv.PromptTitle.Value;
            if (dv.Prompt != null) this.Prompt = dv.Prompt.Value;

            // it has to be not-null because it's a required thing, but you never know...
            if (dv.SequenceOfReferences != null)
            {
                this.SequenceOfReferences = SLTool.TranslateSeqRefToCellPointRange(dv.SequenceOfReferences);
            }
        }
コード例 #32
0
        private static void GenerateWorksheetPartContent(WorksheetPart worksheetPart, XLWorksheet xlWorksheet,
            SaveContext context)
        {
            #region Worksheet

            if (worksheetPart.Worksheet == null)
                worksheetPart.Worksheet = new Worksheet();

            GenerateTables(xlWorksheet, worksheetPart, context);

            if (
                !worksheetPart.Worksheet.NamespaceDeclarations.Contains(new KeyValuePair<String, String>("r",
                    "http://schemas.openxmlformats.org/officeDocument/2006/relationships")))
            {
                worksheetPart.Worksheet.AddNamespaceDeclaration("r",
                    "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
            }

            #endregion

            var cm = new XLWSContentManager(worksheetPart.Worksheet);

            #region SheetProperties

            if (worksheetPart.Worksheet.SheetProperties == null)
                worksheetPart.Worksheet.SheetProperties = new SheetProperties();

            worksheetPart.Worksheet.SheetProperties.TabColor = xlWorksheet.TabColor.HasValue
                ? GetTabColor(xlWorksheet.TabColor)
                : null;

            cm.SetElement(XLWSContentManager.XLWSContents.SheetProperties, worksheetPart.Worksheet.SheetProperties);

            if (worksheetPart.Worksheet.SheetProperties.OutlineProperties == null)
                worksheetPart.Worksheet.SheetProperties.OutlineProperties = new OutlineProperties();

            worksheetPart.Worksheet.SheetProperties.OutlineProperties.SummaryBelow =
                (xlWorksheet.Outline.SummaryVLocation ==
                 XLOutlineSummaryVLocation.Bottom);
            worksheetPart.Worksheet.SheetProperties.OutlineProperties.SummaryRight =
                (xlWorksheet.Outline.SummaryHLocation ==
                 XLOutlineSummaryHLocation.Right);

            if (worksheetPart.Worksheet.SheetProperties.PageSetupProperties == null
                && (xlWorksheet.PageSetup.PagesTall > 0 || xlWorksheet.PageSetup.PagesWide > 0))
                worksheetPart.Worksheet.SheetProperties.PageSetupProperties = new PageSetupProperties {FitToPage = true};

            #endregion

            var maxColumn = 0;

            var sheetDimensionReference = "A1";
            if (xlWorksheet.Internals.CellsCollection.Count > 0)
            {
                maxColumn = xlWorksheet.Internals.CellsCollection.MaxColumnUsed;
                var maxRow = xlWorksheet.Internals.CellsCollection.MaxRowUsed;
                sheetDimensionReference = "A1:" + XLHelper.GetColumnLetterFromNumber(maxColumn) +
                                          maxRow.ToStringLookup();
            }

            if (xlWorksheet.Internals.ColumnsCollection.Count > 0)
            {
                var maxColCollection = xlWorksheet.Internals.ColumnsCollection.Keys.Max();
                if (maxColCollection > maxColumn)
                    maxColumn = maxColCollection;
            }

            #region SheetViews

            if (worksheetPart.Worksheet.SheetDimension == null)
                worksheetPart.Worksheet.SheetDimension = new SheetDimension {Reference = sheetDimensionReference};

            cm.SetElement(XLWSContentManager.XLWSContents.SheetDimension, worksheetPart.Worksheet.SheetDimension);

            if (worksheetPart.Worksheet.SheetViews == null)
                worksheetPart.Worksheet.SheetViews = new SheetViews();

            cm.SetElement(XLWSContentManager.XLWSContents.SheetViews, worksheetPart.Worksheet.SheetViews);

            var sheetView = (SheetView)worksheetPart.Worksheet.SheetViews.FirstOrDefault();
            if (sheetView == null)
            {
                sheetView = new SheetView {WorkbookViewId = 0U};
                worksheetPart.Worksheet.SheetViews.AppendChild(sheetView);
            }

            if (xlWorksheet.TabSelected)
                sheetView.TabSelected = true;
            else
                sheetView.TabSelected = null;


            if (xlWorksheet.ShowFormulas)
                sheetView.ShowFormulas = true;
            else
                sheetView.ShowFormulas = null;

            if (xlWorksheet.ShowGridLines)
                sheetView.ShowGridLines = null;
            else
                sheetView.ShowGridLines = false;

            if (xlWorksheet.ShowOutlineSymbols)
                sheetView.ShowOutlineSymbols = null;
            else
                sheetView.ShowOutlineSymbols = false;

            if (xlWorksheet.ShowRowColHeaders)
                sheetView.ShowRowColHeaders = null;
            else
                sheetView.ShowRowColHeaders = false;

            if (xlWorksheet.ShowRuler)
                sheetView.ShowRuler = null;
            else
                sheetView.ShowRuler = false;

            if (xlWorksheet.ShowWhiteSpace)
                sheetView.ShowWhiteSpace = null;
            else
                sheetView.ShowWhiteSpace = false;

            if (xlWorksheet.ShowZeros)
                sheetView.ShowZeros = null;
            else
                sheetView.ShowZeros = false;

            if (xlWorksheet.RightToLeft)
                sheetView.RightToLeft = true;
            else
                sheetView.RightToLeft = null;

            if (xlWorksheet.SheetView.View == XLSheetViewOptions.Normal)
                sheetView.View = null;
            else
                sheetView.View = xlWorksheet.SheetView.View.ToOpenXml();

            var pane = sheetView.Elements<Pane>().FirstOrDefault();
            if (pane == null)
            {
                pane = new Pane();
                sheetView.AppendChild(pane);
            }


            pane.State = PaneStateValues.FrozenSplit;
            Double hSplit = xlWorksheet.SheetView.SplitColumn;
            Double ySplit = xlWorksheet.SheetView.SplitRow;


            pane.HorizontalSplit = hSplit;
            pane.VerticalSplit = ySplit;

            pane.TopLeftCell = XLHelper.GetColumnLetterFromNumber(xlWorksheet.SheetView.SplitColumn + 1)
                               + (xlWorksheet.SheetView.SplitRow + 1);

            if (hSplit == 0 && ySplit == 0)
                sheetView.RemoveAllChildren<Pane>();

            if (xlWorksheet.SelectedRanges.Any() || xlWorksheet.ActiveCell != null)
            {
                sheetView.RemoveAllChildren<Selection>();

                var firstSelection = xlWorksheet.SelectedRanges.FirstOrDefault();
                var selection = new Selection();
                if (xlWorksheet.ActiveCell != null)
                    selection.ActiveCell = xlWorksheet.ActiveCell.Address.ToStringRelative(false);
                else if (firstSelection != null)
                    selection.ActiveCell = firstSelection.RangeAddress.FirstAddress.ToStringRelative(false);


                var seqRef = new List<String> {selection.ActiveCell.Value};
                seqRef.AddRange(xlWorksheet.SelectedRanges
                    .Select(range => range.RangeAddress.ToStringRelative(false)));


                selection.SequenceOfReferences = new ListValue<StringValue> {InnerText = String.Join(" ", seqRef.Distinct().ToArray())};

                sheetView.Append(selection);
            }

            #endregion

            var maxOutlineColumn = 0;
            if (xlWorksheet.ColumnCount() > 0)
                maxOutlineColumn = xlWorksheet.GetMaxColumnOutline();

            var maxOutlineRow = 0;
            if (xlWorksheet.RowCount() > 0)
                maxOutlineRow = xlWorksheet.GetMaxRowOutline();

            #region SheetFormatProperties

            if (worksheetPart.Worksheet.SheetFormatProperties == null)
                worksheetPart.Worksheet.SheetFormatProperties = new SheetFormatProperties();

            cm.SetElement(XLWSContentManager.XLWSContents.SheetFormatProperties,
                worksheetPart.Worksheet.SheetFormatProperties);

            worksheetPart.Worksheet.SheetFormatProperties.DefaultRowHeight = xlWorksheet.RowHeight;

            if (xlWorksheet.RowHeightChanged)
                worksheetPart.Worksheet.SheetFormatProperties.CustomHeight = true;
            else
                worksheetPart.Worksheet.SheetFormatProperties.CustomHeight = null;


            var worksheetColumnWidth = GetColumnWidth(xlWorksheet.ColumnWidth);
            if (xlWorksheet.ColumnWidthChanged)
                worksheetPart.Worksheet.SheetFormatProperties.DefaultColumnWidth = worksheetColumnWidth;
            else
                worksheetPart.Worksheet.SheetFormatProperties.DefaultColumnWidth = null;


            if (maxOutlineColumn > 0)
                worksheetPart.Worksheet.SheetFormatProperties.OutlineLevelColumn = (byte)maxOutlineColumn;
            else
                worksheetPart.Worksheet.SheetFormatProperties.OutlineLevelColumn = null;

            if (maxOutlineRow > 0)
                worksheetPart.Worksheet.SheetFormatProperties.OutlineLevelRow = (byte)maxOutlineRow;
            else
                worksheetPart.Worksheet.SheetFormatProperties.OutlineLevelRow = null;

            #endregion

            #region Columns

            if (xlWorksheet.Internals.CellsCollection.Count == 0 &&
                xlWorksheet.Internals.ColumnsCollection.Count == 0
                && xlWorksheet.Style.Equals(DefaultStyle))
                worksheetPart.Worksheet.RemoveAllChildren<Columns>();
            else
            {
                if (!worksheetPart.Worksheet.Elements<Columns>().Any())
                {
                    var previousElement = cm.GetPreviousElementFor(XLWSContentManager.XLWSContents.Columns);
                    worksheetPart.Worksheet.InsertAfter(new Columns(), previousElement);
                }

                var columns = worksheetPart.Worksheet.Elements<Columns>().First();
                cm.SetElement(XLWSContentManager.XLWSContents.Columns, columns);

                var sheetColumnsByMin = columns.Elements<Column>().ToDictionary(c => c.Min.Value, c => c);
                //Dictionary<UInt32, Column> sheetColumnsByMax = columns.Elements<Column>().ToDictionary(c => c.Max.Value, c => c);

                Int32 minInColumnsCollection;
                Int32 maxInColumnsCollection;
                if (xlWorksheet.Internals.ColumnsCollection.Count > 0)
                {
                    minInColumnsCollection = xlWorksheet.Internals.ColumnsCollection.Keys.Min();
                    maxInColumnsCollection = xlWorksheet.Internals.ColumnsCollection.Keys.Max();
                }
                else
                {
                    minInColumnsCollection = 1;
                    maxInColumnsCollection = 0;
                }

                var worksheetStyleId = context.SharedStyles[xlWorksheet.GetStyleId()].StyleId;
                if (minInColumnsCollection > 1)
                {
                    UInt32Value min = 1;
                    UInt32Value max = (UInt32)(minInColumnsCollection - 1);


                    for (var co = min; co <= max; co++)
                    {
                        var column = new Column
                        {
                            Min = co,
                            Max = co,
                            Style = worksheetStyleId,
                            Width = worksheetColumnWidth,
                            CustomWidth = true
                        };

                        UpdateColumn(column, columns, sheetColumnsByMin); //, sheetColumnsByMax);
                    }
                }

                for (var co = minInColumnsCollection; co <= maxInColumnsCollection; co++)
                {
                    UInt32 styleId;
                    Double columnWidth;
                    var isHidden = false;
                    var collapsed = false;
                    var outlineLevel = 0;
                    if (xlWorksheet.Internals.ColumnsCollection.ContainsKey(co))
                    {
                        styleId = context.SharedStyles[xlWorksheet.Internals.ColumnsCollection[co].GetStyleId()].StyleId;
                        columnWidth = GetColumnWidth(xlWorksheet.Internals.ColumnsCollection[co].Width);
                        isHidden = xlWorksheet.Internals.ColumnsCollection[co].IsHidden;
                        collapsed = xlWorksheet.Internals.ColumnsCollection[co].Collapsed;
                        outlineLevel = xlWorksheet.Internals.ColumnsCollection[co].OutlineLevel;
                    }
                    else
                    {
                        styleId = context.SharedStyles[xlWorksheet.GetStyleId()].StyleId;
                        columnWidth = worksheetColumnWidth;
                    }

                    var column = new Column
                    {
                        Min = (UInt32)co,
                        Max = (UInt32)co,
                        Style = styleId,
                        Width = columnWidth,
                        CustomWidth = true
                    };

                    if (isHidden)
                        column.Hidden = true;
                    if (collapsed)
                        column.Collapsed = true;
                    if (outlineLevel > 0)
                        column.OutlineLevel = (byte)outlineLevel;

                    UpdateColumn(column, columns, sheetColumnsByMin); //, sheetColumnsByMax);
                }

                var collection = maxInColumnsCollection;
                foreach (
                    var col in
                        columns.Elements<Column>().Where(c => c.Min > (UInt32)(collection)).OrderBy(
                            c => c.Min.Value))
                {
                    col.Style = worksheetStyleId;
                    col.Width = worksheetColumnWidth;
                    col.CustomWidth = true;

                    if ((Int32)col.Max.Value > maxInColumnsCollection)
                        maxInColumnsCollection = (Int32)col.Max.Value;
                }

                if (maxInColumnsCollection < XLHelper.MaxColumnNumber && !xlWorksheet.Style.Equals(DefaultStyle))
                {
                    var column = new Column
                    {
                        Min = (UInt32)(maxInColumnsCollection + 1),
                        Max = (UInt32)(XLHelper.MaxColumnNumber),
                        Style = worksheetStyleId,
                        Width = worksheetColumnWidth,
                        CustomWidth = true
                    };
                    columns.AppendChild(column);
                }

                CollapseColumns(columns, sheetColumnsByMin);

                if (!columns.Any())
                {
                    worksheetPart.Worksheet.RemoveAllChildren<Columns>();
                    cm.SetElement(XLWSContentManager.XLWSContents.Columns, null);
                }
            }

            #endregion

            #region SheetData

            if (!worksheetPart.Worksheet.Elements<SheetData>().Any())
            {
                var previousElement = cm.GetPreviousElementFor(XLWSContentManager.XLWSContents.SheetData);
                worksheetPart.Worksheet.InsertAfter(new SheetData(), previousElement);
            }

            var sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
            cm.SetElement(XLWSContentManager.XLWSContents.SheetData, sheetData);

            var cellsByRow = new Dictionary<Int32, List<IXLCell>>();
            foreach (var c in xlWorksheet.Internals.CellsCollection.GetCells())
            {
                var rowNum = c.Address.RowNumber;
                if (!cellsByRow.ContainsKey(rowNum))
                    cellsByRow.Add(rowNum, new List<IXLCell>());

                cellsByRow[rowNum].Add(c);
            }

            var lastRow = 0;
            var sheetDataRows =
                sheetData.Elements<Row>().ToDictionary(r => r.RowIndex == null ? ++lastRow : (Int32)r.RowIndex.Value,
                    r => r);
            foreach (
                var r in
                    xlWorksheet.Internals.RowsCollection.Deleted.Where(r => sheetDataRows.ContainsKey(r.Key)))
            {
                sheetData.RemoveChild(sheetDataRows[r.Key]);
                sheetDataRows.Remove(r.Key);
                xlWorksheet.Internals.CellsCollection.Deleted.RemoveWhere(d => d.Row == r.Key);
            }

            var distinctRows = cellsByRow.Keys.Union(xlWorksheet.Internals.RowsCollection.Keys);
            var noRows = (sheetData.Elements<Row>().FirstOrDefault() == null);
            foreach (var distinctRow in distinctRows.OrderBy(r => r))
            {
                Row row; // = sheetData.Elements<Row>().FirstOrDefault(r => r.RowIndex.Value == (UInt32)distinctRow);
                if (sheetDataRows.ContainsKey(distinctRow))
                    row = sheetDataRows[distinctRow];
                else
                {
                    row = new Row {RowIndex = (UInt32)distinctRow};
                    if (noRows)
                    {
                        sheetData.AppendChild(row);
                        noRows = false;
                    }
                    else
                    {
                        if (sheetDataRows.Any(r => r.Key > row.RowIndex.Value))
                        {
                            var minRow = sheetDataRows.Where(r => r.Key > (Int32)row.RowIndex.Value).Min(r => r.Key);
                            var rowBeforeInsert = sheetDataRows[minRow];
                            sheetData.InsertBefore(row, rowBeforeInsert);
                        }
                        else
                            sheetData.AppendChild(row);
                    }
                }

                if (maxColumn > 0)
                    row.Spans = new ListValue<StringValue> {InnerText = "1:" + maxColumn.ToStringLookup()};

                row.Height = null;
                row.CustomHeight = null;
                row.Hidden = null;
                row.StyleIndex = null;
                row.CustomFormat = null;
                row.Collapsed = null;
                if (xlWorksheet.Internals.RowsCollection.ContainsKey(distinctRow))
                {
                    var thisRow = xlWorksheet.Internals.RowsCollection[distinctRow];
                    if (thisRow.HeightChanged)
                    {
                        row.Height = thisRow.Height;
                        row.CustomHeight = true;
                        row.CustomFormat = true;
                    }

                    if (thisRow.GetStyleId() != xlWorksheet.GetStyleId())
                    {
                        row.StyleIndex = context.SharedStyles[thisRow.GetStyleId()].StyleId;
                        row.CustomFormat = true;
                    }

                    if (thisRow.IsHidden)
                        row.Hidden = true;
                    if (thisRow.Collapsed)
                        row.Collapsed = true;
                    if (thisRow.OutlineLevel > 0)
                        row.OutlineLevel = (byte)thisRow.OutlineLevel;
                }

                var lastCell = 0;
                var cellsByReference = row.Elements<Cell>().ToDictionary(c => c.CellReference == null
                    ? XLHelper.GetColumnLetterFromNumber(
                        ++lastCell) + distinctRow
                    : c.CellReference.Value, c => c);

                foreach (var c in xlWorksheet.Internals.CellsCollection.Deleted.ToList())
                {
                    var key = XLHelper.GetColumnLetterFromNumber(c.Column) + c.Row.ToStringLookup();
                    if (!cellsByReference.ContainsKey(key)) continue;
                    row.RemoveChild(cellsByReference[key]);
                    xlWorksheet.Internals.CellsCollection.Deleted.Remove(c);
                }

                if (!cellsByRow.ContainsKey(distinctRow)) continue;

                var isNewRow = !row.Elements<Cell>().Any();
                var mRows = row.Elements<Cell>().ToDictionary(c => XLHelper.GetColumnNumberFromAddress(c.CellReference.Value), c => c);
                foreach (var opCell in cellsByRow[distinctRow]
                    .OrderBy(c => c.Address.ColumnNumber)
                    .Select(c => (XLCell)c))
                {
                    var styleId = context.SharedStyles[opCell.GetStyleId()].StyleId;

                    var dataType = opCell.DataType;
                    var cellReference = (opCell.Address).GetTrimmedAddress();

                    Cell cell;
                    if (cellsByReference.ContainsKey(cellReference))
                        cell = cellsByReference[cellReference];
                    else
                    {
                        cell = new Cell {CellReference = new StringValue(cellReference)};
                        if (isNewRow)
                            row.AppendChild(cell);
                        else
                        {
                            var newColumn = XLHelper.GetColumnNumberFromAddress(cellReference);

                            Cell cellBeforeInsert = null;
                            int[] lastCo = {Int32.MaxValue};
                            foreach (var c in mRows.Where(kp => kp.Key > newColumn).Where(c => lastCo[0] > c.Key))
                            {
                                cellBeforeInsert = c.Value;
                                lastCo[0] = c.Key;
                            }
                            if (cellBeforeInsert == null)
                                row.AppendChild(cell);
                            else
                                row.InsertBefore(cell, cellBeforeInsert);
                        }
                    }

                    cell.StyleIndex = styleId;
                    var formula = opCell.FormulaA1;
                    if (opCell.HasFormula)
                    {
                        if (formula.StartsWith("{"))
                        {
                            formula = formula.Substring(1, formula.Length - 2);
                            var f = new CellFormula {FormulaType = CellFormulaValues.Array};
                            
                            if (opCell.FormulaReference.FirstAddress.Equals(opCell.Address))
                            {
                                f.Text = formula;
                                f.Reference = opCell.FormulaReference.ToStringRelative();
                            }

                            cell.CellFormula = f;
                        }
                        else
                            cell.CellFormula = new CellFormula(formula);

                        cell.CellValue = null;
                    }
                    else
                    {
                        cell.CellFormula = null;

                        cell.DataType = opCell.DataType == XLCellValues.DateTime ? null : GetCellValue(opCell);

                        var cellValue = new CellValue();
                        if (dataType == XLCellValues.Text)
                        {
                            if (opCell.InnerText.Length == 0)
                                cell.CellValue = null;
                            else
                            {
                                if (opCell.ShareString)
                                {
                                    cellValue.Text = opCell.SharedStringId.ToString();
                                    cell.CellValue = cellValue;
                                }
                                else
                                {
                                    var text = opCell.GetString();
                                    var t = new Text(text);
                                    if (text.PreserveSpaces())
                                        t.Space = SpaceProcessingModeValues.Preserve;

                                    cell.InlineString = new InlineString {Text = t};
                                }
                            }
                        }
                        else if (dataType == XLCellValues.TimeSpan)
                        {
                            var timeSpan = opCell.GetTimeSpan();
                            cellValue.Text =
                                XLCell.BaseDate.Add(timeSpan).ToOADate().ToString(CultureInfo.InvariantCulture);
                            cell.CellValue = cellValue;
                        }
                        else if (dataType == XLCellValues.DateTime || dataType == XLCellValues.Number)
                        {
                            if (!XLHelper.IsNullOrWhiteSpace(opCell.InnerText))
                                cellValue.Text = Double.Parse(opCell.InnerText).ToString(CultureInfo.InvariantCulture);
                            cell.CellValue = cellValue;
                        }
                        else
                        {
                            cellValue.Text = opCell.InnerText;
                            cell.CellValue = cellValue;
                        }
                    }
                }
                xlWorksheet.Internals.CellsCollection.Deleted.RemoveWhere(d => d.Row == distinctRow);
            }
            foreach (
                var r in
                    xlWorksheet.Internals.CellsCollection.Deleted.Select(c => c.Row).Distinct().Where(
                        sheetDataRows.ContainsKey))
            {
                sheetData.RemoveChild(sheetDataRows[r]);
                sheetDataRows.Remove(r);
            }

            #endregion

            #region SheetProtection

            if (xlWorksheet.Protection.Protected)
            {
                if (!worksheetPart.Worksheet.Elements<SheetProtection>().Any())
                {
                    var previousElement = cm.GetPreviousElementFor(XLWSContentManager.XLWSContents.SheetProtection);
                    worksheetPart.Worksheet.InsertAfter(new SheetProtection(), previousElement);
                }

                var sheetProtection = worksheetPart.Worksheet.Elements<SheetProtection>().First();
                cm.SetElement(XLWSContentManager.XLWSContents.SheetProtection, sheetProtection);

                var protection = xlWorksheet.Protection;
                sheetProtection.Sheet = protection.Protected;
                if (!XLHelper.IsNullOrWhiteSpace(protection.PasswordHash))
                    sheetProtection.Password = protection.PasswordHash;
                sheetProtection.FormatCells = GetBooleanValue(!protection.FormatCells, true);
                sheetProtection.FormatColumns = GetBooleanValue(!protection.FormatColumns, true);
                sheetProtection.FormatRows = GetBooleanValue(!protection.FormatRows, true);
                sheetProtection.InsertColumns = GetBooleanValue(!protection.InsertColumns, true);
                sheetProtection.InsertHyperlinks = GetBooleanValue(!protection.InsertHyperlinks, true);
                sheetProtection.InsertRows = GetBooleanValue(!protection.InsertRows, true);
                sheetProtection.DeleteColumns = GetBooleanValue(!protection.DeleteColumns, true);
                sheetProtection.DeleteRows = GetBooleanValue(!protection.DeleteRows, true);
                sheetProtection.AutoFilter = GetBooleanValue(!protection.AutoFilter, true);
                sheetProtection.PivotTables = GetBooleanValue(!protection.PivotTables, true);
                sheetProtection.Sort = GetBooleanValue(!protection.Sort, true);
                sheetProtection.SelectLockedCells = GetBooleanValue(!protection.SelectLockedCells, false);
                sheetProtection.SelectUnlockedCells = GetBooleanValue(!protection.SelectUnlockedCells, false);
            }
            else
            {
                worksheetPart.Worksheet.RemoveAllChildren<SheetProtection>();
                cm.SetElement(XLWSContentManager.XLWSContents.SheetProtection, null);
            }

            #endregion

            #region AutoFilter

            worksheetPart.Worksheet.RemoveAllChildren<AutoFilter>();
            if (xlWorksheet.AutoFilter.Enabled)
            {
                var previousElement = cm.GetPreviousElementFor(XLWSContentManager.XLWSContents.AutoFilter);
                worksheetPart.Worksheet.InsertAfter(new AutoFilter(), previousElement);


                var autoFilter = worksheetPart.Worksheet.Elements<AutoFilter>().First();
                cm.SetElement(XLWSContentManager.XLWSContents.AutoFilter, autoFilter);

                PopulateAutoFilter(xlWorksheet.AutoFilter, autoFilter);
            }
            else
            {
                cm.SetElement(XLWSContentManager.XLWSContents.AutoFilter, null);
            }

            #endregion

            #region MergeCells

            if ((xlWorksheet).Internals.MergedRanges.Any())
            {
                if (!worksheetPart.Worksheet.Elements<MergeCells>().Any())
                {
                    var previousElement = cm.GetPreviousElementFor(XLWSContentManager.XLWSContents.MergeCells);
                    worksheetPart.Worksheet.InsertAfter(new MergeCells(), previousElement);
                }

                var mergeCells = worksheetPart.Worksheet.Elements<MergeCells>().First();
                cm.SetElement(XLWSContentManager.XLWSContents.MergeCells, mergeCells);
                mergeCells.RemoveAllChildren<MergeCell>();

                foreach (var mergeCell in (xlWorksheet).Internals.MergedRanges.Select(
                    m => m.RangeAddress.FirstAddress.ToString() + ":" + m.RangeAddress.LastAddress.ToString()).Select(
                        merged => new MergeCell {Reference = merged}))
                    mergeCells.AppendChild(mergeCell);

                mergeCells.Count = (UInt32)mergeCells.Count();
            }
            else
            {
                worksheetPart.Worksheet.RemoveAllChildren<MergeCells>();
                cm.SetElement(XLWSContentManager.XLWSContents.MergeCells, null);
            }

            #endregion

            #region Conditional Formatting

            if (!xlWorksheet.ConditionalFormats.Any())
            {
                worksheetPart.Worksheet.RemoveAllChildren<ConditionalFormatting>();
                cm.SetElement(XLWSContentManager.XLWSContents.ConditionalFormatting, null);
            }
            else
            {
                worksheetPart.Worksheet.RemoveAllChildren<ConditionalFormatting>();
                var previousElement = cm.GetPreviousElementFor(XLWSContentManager.XLWSContents.ConditionalFormatting);


                //if (!worksheetPart.Worksheet.Elements<ConditionalFormatting>().Any())
                //{
                //    var previousElement = cm.GetPreviousElementFor(XLWSContentManager.XLWSContents.ConditionalFormatting);
                //    worksheetPart.Worksheet.InsertAfter(new ConditionalFormatting(), previousElement);
                //}

                //var conditionalFormats = worksheetPart.Worksheet.Elements<ConditionalFormatting>().First();
                //cm.SetElement(XLWSContentManager.XLWSContents.ConditionalFormatting, conditionalFormats);
                ////conditionalFormats.RemoveAllChildren<ConditionalFormat>();
                var priority = 0;
                foreach (var cf in xlWorksheet.ConditionalFormats)
                {
                    priority++;
                    var conditionalFormatting = new ConditionalFormatting
                    {
                        SequenceOfReferences =
                            new ListValue<StringValue> {InnerText = cf.Range.RangeAddress.ToStringRelative(false)}
                    };
                    conditionalFormatting.Append(XLCFConverters.Convert(cf, priority, context));

                    worksheetPart.Worksheet.InsertAfter(conditionalFormatting, previousElement);
                    previousElement = conditionalFormatting;
                    cm.SetElement(XLWSContentManager.XLWSContents.ConditionalFormatting, conditionalFormatting);
                }
            }

            #endregion

            #region DataValidations

            if (!xlWorksheet.DataValidations.Any(d => d.IsDirty()))
            {
                worksheetPart.Worksheet.RemoveAllChildren<DataValidations>();
                cm.SetElement(XLWSContentManager.XLWSContents.DataValidations, null);
            }
            else
            {
                if (!worksheetPart.Worksheet.Elements<DataValidations>().Any())
                {
                    var previousElement = cm.GetPreviousElementFor(XLWSContentManager.XLWSContents.DataValidations);
                    worksheetPart.Worksheet.InsertAfter(new DataValidations(), previousElement);
                }

                var dataValidations = worksheetPart.Worksheet.Elements<DataValidations>().First();
                cm.SetElement(XLWSContentManager.XLWSContents.DataValidations, dataValidations);
                dataValidations.RemoveAllChildren<DataValidation>();
                foreach (var dv in xlWorksheet.DataValidations)
                {
                    var sequence = dv.Ranges.Aggregate(String.Empty, (current, r) => current + (r.RangeAddress + " "));

                    if (sequence.Length > 0)
                        sequence = sequence.Substring(0, sequence.Length - 1);

                    var dataValidation = new DataValidation
                    {
                        AllowBlank = dv.IgnoreBlanks,
                        Formula1 = new Formula1(dv.MinValue),
                        Formula2 = new Formula2(dv.MaxValue),
                        Type = dv.AllowedValues.ToOpenXml(),
                        ShowErrorMessage = dv.ShowErrorMessage,
                        Prompt = dv.InputMessage,
                        PromptTitle = dv.InputTitle,
                        ErrorTitle = dv.ErrorTitle,
                        Error = dv.ErrorMessage,
                        ShowDropDown = !dv.InCellDropdown,
                        ShowInputMessage = dv.ShowInputMessage,
                        ErrorStyle = dv.ErrorStyle.ToOpenXml(),
                        Operator = dv.Operator.ToOpenXml(),
                        SequenceOfReferences =
                            new ListValue<StringValue> {InnerText = sequence}
                    };

                    dataValidations.AppendChild(dataValidation);
                }
                dataValidations.Count = (UInt32)xlWorksheet.DataValidations.Count();
            }

            #endregion

            #region Hyperlinks

            var relToRemove = worksheetPart.HyperlinkRelationships.ToList();
            relToRemove.ForEach(worksheetPart.DeleteReferenceRelationship);
            if (!xlWorksheet.Hyperlinks.Any())
            {
                worksheetPart.Worksheet.RemoveAllChildren<Hyperlinks>();
                cm.SetElement(XLWSContentManager.XLWSContents.Hyperlinks, null);
            }
            else
            {
                if (!worksheetPart.Worksheet.Elements<Hyperlinks>().Any())
                {
                    var previousElement = cm.GetPreviousElementFor(XLWSContentManager.XLWSContents.Hyperlinks);
                    worksheetPart.Worksheet.InsertAfter(new Hyperlinks(), previousElement);
                }

                var hyperlinks = worksheetPart.Worksheet.Elements<Hyperlinks>().First();
                cm.SetElement(XLWSContentManager.XLWSContents.Hyperlinks, hyperlinks);
                hyperlinks.RemoveAllChildren<Hyperlink>();
                foreach (var hl in xlWorksheet.Hyperlinks)
                {
                    Hyperlink hyperlink;
                    if (hl.IsExternal)
                    {
                        var rId = context.RelIdGenerator.GetNext(RelType.Workbook);
                        hyperlink = new Hyperlink {Reference = hl.Cell.Address.ToString(), Id = rId};
                        worksheetPart.AddHyperlinkRelationship(hl.ExternalAddress, true, rId);
                    }
                    else
                    {
                        hyperlink = new Hyperlink
                        {
                            Reference = hl.Cell.Address.ToString(),
                            Location = hl.InternalAddress,
                            Display = hl.Cell.GetFormattedString()
                        };
                    }
                    if (!XLHelper.IsNullOrWhiteSpace(hl.Tooltip))
                        hyperlink.Tooltip = hl.Tooltip;
                    hyperlinks.AppendChild(hyperlink);
                }
            }

            #endregion

            #region PrintOptions

            if (!worksheetPart.Worksheet.Elements<PrintOptions>().Any())
            {
                var previousElement = cm.GetPreviousElementFor(XLWSContentManager.XLWSContents.PrintOptions);
                worksheetPart.Worksheet.InsertAfter(new PrintOptions(), previousElement);
            }

            var printOptions = worksheetPart.Worksheet.Elements<PrintOptions>().First();
            cm.SetElement(XLWSContentManager.XLWSContents.PrintOptions, printOptions);

            printOptions.HorizontalCentered = xlWorksheet.PageSetup.CenterHorizontally;
            printOptions.VerticalCentered = xlWorksheet.PageSetup.CenterVertically;
            printOptions.Headings = xlWorksheet.PageSetup.ShowRowAndColumnHeadings;
            printOptions.GridLines = xlWorksheet.PageSetup.ShowGridlines;

            #endregion

            #region PageMargins

            if (!worksheetPart.Worksheet.Elements<PageMargins>().Any())
            {
                var previousElement = cm.GetPreviousElementFor(XLWSContentManager.XLWSContents.PageMargins);
                worksheetPart.Worksheet.InsertAfter(new PageMargins(), previousElement);
            }

            var pageMargins = worksheetPart.Worksheet.Elements<PageMargins>().First();
            cm.SetElement(XLWSContentManager.XLWSContents.PageMargins, pageMargins);
            pageMargins.Left = xlWorksheet.PageSetup.Margins.Left;
            pageMargins.Right = xlWorksheet.PageSetup.Margins.Right;
            pageMargins.Top = xlWorksheet.PageSetup.Margins.Top;
            pageMargins.Bottom = xlWorksheet.PageSetup.Margins.Bottom;
            pageMargins.Header = xlWorksheet.PageSetup.Margins.Header;
            pageMargins.Footer = xlWorksheet.PageSetup.Margins.Footer;

            #endregion

            #region PageSetup

            if (!worksheetPart.Worksheet.Elements<PageSetup>().Any())
            {
                var previousElement = cm.GetPreviousElementFor(XLWSContentManager.XLWSContents.PageSetup);
                worksheetPart.Worksheet.InsertAfter(new PageSetup(), previousElement);
            }

            var pageSetup = worksheetPart.Worksheet.Elements<PageSetup>().First();
            cm.SetElement(XLWSContentManager.XLWSContents.PageSetup, pageSetup);

            pageSetup.Orientation = xlWorksheet.PageSetup.PageOrientation.ToOpenXml();
            pageSetup.PaperSize = (UInt32)xlWorksheet.PageSetup.PaperSize;
            pageSetup.BlackAndWhite = xlWorksheet.PageSetup.BlackAndWhite;
            pageSetup.Draft = xlWorksheet.PageSetup.DraftQuality;
            pageSetup.PageOrder = xlWorksheet.PageSetup.PageOrder.ToOpenXml();
            pageSetup.CellComments = xlWorksheet.PageSetup.ShowComments.ToOpenXml();
            pageSetup.Errors = xlWorksheet.PageSetup.PrintErrorValue.ToOpenXml();

            if (xlWorksheet.PageSetup.FirstPageNumber > 0)
            {
                pageSetup.FirstPageNumber = (UInt32)xlWorksheet.PageSetup.FirstPageNumber;
                pageSetup.UseFirstPageNumber = true;
            }
            else
            {
                pageSetup.FirstPageNumber = null;
                pageSetup.UseFirstPageNumber = null;
            }

            if (xlWorksheet.PageSetup.HorizontalDpi > 0)
                pageSetup.HorizontalDpi = (UInt32)xlWorksheet.PageSetup.HorizontalDpi;
            else
                pageSetup.HorizontalDpi = null;

            if (xlWorksheet.PageSetup.VerticalDpi > 0)
                pageSetup.VerticalDpi = (UInt32)xlWorksheet.PageSetup.VerticalDpi;
            else
                pageSetup.VerticalDpi = null;

            if (xlWorksheet.PageSetup.Scale > 0)
            {
                pageSetup.Scale = (UInt32)xlWorksheet.PageSetup.Scale;
                pageSetup.FitToWidth = null;
                pageSetup.FitToHeight = null;
            }
            else
            {
                pageSetup.Scale = null;

                if (xlWorksheet.PageSetup.PagesWide > 0)
                    pageSetup.FitToWidth = (UInt32)xlWorksheet.PageSetup.PagesWide;
                else
                    pageSetup.FitToWidth = 0;

                if (xlWorksheet.PageSetup.PagesTall > 0)
                    pageSetup.FitToHeight = (UInt32)xlWorksheet.PageSetup.PagesTall;
                else
                    pageSetup.FitToHeight = 0;
            }

            #endregion

            #region HeaderFooter

            var headerFooter = worksheetPart.Worksheet.Elements<HeaderFooter>().FirstOrDefault();
            if (headerFooter == null)
                headerFooter = new HeaderFooter();
            else
                worksheetPart.Worksheet.RemoveAllChildren<HeaderFooter>();

            {
                var previousElement = cm.GetPreviousElementFor(XLWSContentManager.XLWSContents.HeaderFooter);
                worksheetPart.Worksheet.InsertAfter(headerFooter, previousElement);
                cm.SetElement(XLWSContentManager.XLWSContents.HeaderFooter, headerFooter);
            }
            if (((XLHeaderFooter)xlWorksheet.PageSetup.Header).Changed
                || ((XLHeaderFooter)xlWorksheet.PageSetup.Footer).Changed)
            {
                //var headerFooter = worksheetPart.Worksheet.Elements<HeaderFooter>().First();

                headerFooter.RemoveAllChildren();

                headerFooter.ScaleWithDoc = xlWorksheet.PageSetup.ScaleHFWithDocument;
                headerFooter.AlignWithMargins = xlWorksheet.PageSetup.AlignHFWithMargins;
                headerFooter.DifferentFirst = xlWorksheet.PageSetup.DifferentFirstPageOnHF;
                headerFooter.DifferentOddEven = xlWorksheet.PageSetup.DifferentOddEvenPagesOnHF;

                var oddHeader = new OddHeader(xlWorksheet.PageSetup.Header.GetText(XLHFOccurrence.OddPages));
                headerFooter.AppendChild(oddHeader);
                var oddFooter = new OddFooter(xlWorksheet.PageSetup.Footer.GetText(XLHFOccurrence.OddPages));
                headerFooter.AppendChild(oddFooter);

                var evenHeader = new EvenHeader(xlWorksheet.PageSetup.Header.GetText(XLHFOccurrence.EvenPages));
                headerFooter.AppendChild(evenHeader);
                var evenFooter = new EvenFooter(xlWorksheet.PageSetup.Footer.GetText(XLHFOccurrence.EvenPages));
                headerFooter.AppendChild(evenFooter);

                var firstHeader = new FirstHeader(xlWorksheet.PageSetup.Header.GetText(XLHFOccurrence.FirstPage));
                headerFooter.AppendChild(firstHeader);
                var firstFooter = new FirstFooter(xlWorksheet.PageSetup.Footer.GetText(XLHFOccurrence.FirstPage));
                headerFooter.AppendChild(firstFooter);
            }

            #endregion

            #region RowBreaks

            if (!worksheetPart.Worksheet.Elements<RowBreaks>().Any())
            {
                var previousElement = cm.GetPreviousElementFor(XLWSContentManager.XLWSContents.RowBreaks);
                worksheetPart.Worksheet.InsertAfter(new RowBreaks(), previousElement);
            }

            var rowBreaks = worksheetPart.Worksheet.Elements<RowBreaks>().First();

            var rowBreakCount = xlWorksheet.PageSetup.RowBreaks.Count;
            if (rowBreakCount > 0)
            {
                rowBreaks.Count = (UInt32)rowBreakCount;
                rowBreaks.ManualBreakCount = (UInt32)rowBreakCount;
                var lastRowNum = (UInt32)xlWorksheet.RangeAddress.LastAddress.RowNumber;
                foreach (var break1 in xlWorksheet.PageSetup.RowBreaks.Select(rb => new Break
                {
                    Id = (UInt32)rb,
                    Max = lastRowNum,
                    ManualPageBreak = true
                }))
                    rowBreaks.AppendChild(break1);
                cm.SetElement(XLWSContentManager.XLWSContents.RowBreaks, rowBreaks);
            }
            else
            {
                worksheetPart.Worksheet.RemoveAllChildren<RowBreaks>();
                cm.SetElement(XLWSContentManager.XLWSContents.RowBreaks, null);
            }

            #endregion

            #region ColumnBreaks

            if (!worksheetPart.Worksheet.Elements<ColumnBreaks>().Any())
            {
                var previousElement = cm.GetPreviousElementFor(XLWSContentManager.XLWSContents.ColumnBreaks);
                worksheetPart.Worksheet.InsertAfter(new ColumnBreaks(), previousElement);
            }

            var columnBreaks = worksheetPart.Worksheet.Elements<ColumnBreaks>().First();

            var columnBreakCount = xlWorksheet.PageSetup.ColumnBreaks.Count;
            if (columnBreakCount > 0)
            {
                columnBreaks.Count = (UInt32)columnBreakCount;
                columnBreaks.ManualBreakCount = (UInt32)columnBreakCount;
                var maxColumnNumber = (UInt32)xlWorksheet.RangeAddress.LastAddress.ColumnNumber;
                foreach (var break1 in xlWorksheet.PageSetup.ColumnBreaks.Select(cb => new Break
                {
                    Id = (UInt32)cb,
                    Max = maxColumnNumber,
                    ManualPageBreak = true
                }))
                    columnBreaks.AppendChild(break1);
                cm.SetElement(XLWSContentManager.XLWSContents.ColumnBreaks, columnBreaks);
            }
            else
            {
                worksheetPart.Worksheet.RemoveAllChildren<ColumnBreaks>();
                cm.SetElement(XLWSContentManager.XLWSContents.ColumnBreaks, null);
            }

            #endregion

            #region Drawings

            //worksheetPart.Worksheet.RemoveAllChildren<Drawing>();
            //{
            //    OpenXmlElement previousElement = cm.GetPreviousElementFor(XLWSContentManager.XLWSContents.Drawing);
            //    worksheetPart.Worksheet.InsertAfter(new Drawing() { Id = String.Format("rId{0}", 1) }, previousElement);
            //}

            //Drawing drawing = worksheetPart.Worksheet.Elements<Drawing>().First();
            //cm.SetElement(XLWSContentManager.XLWSContents.Drawing, drawing);

            #endregion

            #region Tables

            worksheetPart.Worksheet.RemoveAllChildren<TableParts>();
            {
                var previousElement = cm.GetPreviousElementFor(XLWSContentManager.XLWSContents.TableParts);
                worksheetPart.Worksheet.InsertAfter(new TableParts(), previousElement);
            }

            var tableParts = worksheetPart.Worksheet.Elements<TableParts>().First();
            cm.SetElement(XLWSContentManager.XLWSContents.TableParts, tableParts);

            tableParts.Count = (UInt32)xlWorksheet.Tables.Count();
            foreach (
                var tablePart in
                    from XLTable xlTable in xlWorksheet.Tables select new TablePart {Id = xlTable.RelId})
                tableParts.AppendChild(tablePart);

            #endregion

            #region LegacyDrawing

            if (xlWorksheet.LegacyDrawingIsNew)
            {
                worksheetPart.Worksheet.RemoveAllChildren<LegacyDrawing>();
                {
                    if (!XLHelper.IsNullOrWhiteSpace(xlWorksheet.LegacyDrawingId))
                    {
                        var previousElement = cm.GetPreviousElementFor(XLWSContentManager.XLWSContents.LegacyDrawing);
                        worksheetPart.Worksheet.InsertAfter(new LegacyDrawing {Id = xlWorksheet.LegacyDrawingId},
                            previousElement);
                    }
                }
            }

            #endregion

            #region LegacyDrawingHeaderFooter

            //LegacyDrawingHeaderFooter legacyHeaderFooter = worksheetPart.Worksheet.Elements<LegacyDrawingHeaderFooter>().FirstOrDefault();
            //if (legacyHeaderFooter != null)
            //{
            //    worksheetPart.Worksheet.RemoveAllChildren<LegacyDrawingHeaderFooter>();
            //    {
            //            var previousElement = cm.GetPreviousElementFor(XLWSContentManager.XLWSContents.LegacyDrawingHeaderFooter);
            //            worksheetPart.Worksheet.InsertAfter(new LegacyDrawingHeaderFooter { Id = xlWorksheet.LegacyDrawingId },
            //                                                previousElement);
            //    }
            //}

            #endregion
        }
コード例 #33
0
        internal DataValidation ToDataValidation()
        {
            DataValidation dv = new DataValidation();

            if (this.Formula1.Length > 0) dv.Formula1 = new Formula1(this.Formula1);
            if (this.Formula2.Length > 0) dv.Formula2 = new Formula2(this.Formula2);

            if (this.Type != DataValidationValues.None) dv.Type = this.Type;
            if (this.ErrorStyle != DataValidationErrorStyleValues.Stop) dv.ErrorStyle = this.ErrorStyle;
            if (this.ImeMode != DataValidationImeModeValues.NoControl) dv.ImeMode = this.ImeMode;
            if (this.Operator != DataValidationOperatorValues.Between) dv.Operator = this.Operator;

            if (this.AllowBlank) dv.AllowBlank = this.AllowBlank;
            if (this.ShowDropDown) dv.ShowDropDown = this.ShowDropDown;
            if (this.ShowInputMessage) dv.ShowInputMessage = this.ShowInputMessage;
            if (this.ShowErrorMessage) dv.ShowErrorMessage = this.ShowErrorMessage;

            if (this.ErrorTitle.Length > 0) dv.ErrorTitle = this.ErrorTitle;
            if (this.Error.Length > 0) dv.Error = this.Error;

            if (this.PromptTitle.Length > 0) dv.PromptTitle = this.PromptTitle;
            if (this.Prompt.Length > 0) dv.Prompt = this.Prompt;

            dv.SequenceOfReferences = SLTool.TranslateCellPointRangeToSeqRef(this.SequenceOfReferences);

            return dv;
        }
        public virtual IEnumerable<DataValidation> AddDataValidations(IEnumerable<IColumnDefinition> columnDefinitions)
        {
            var defs = columnDefinitions.ToList();
            //Last row of excel
            const int lastRow = 1048576;

            //=FormOIDSource
            const string formula1 = "={0}";
            
            //=INDIRECT("FormOid.Form2")
            const string formula2 = "=INDIRECT(\"{0}.\" & OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,{1}))";


            List<DataValidation> validations = new List<DataValidation>();
            for (int i = 0; i < defs.Count; i++)
            {
                var def = defs[i];
                
                string columnName = (i + 1).ConvertToColumnName();

                //without header: "A1:A1048576", with header : "A2:A1048576"
                int firstRow = def.Header == null ? 1 : 2;
                
                string source = def.ColumnSource;
                if (string.IsNullOrEmpty(source))
                {
                    continue;
                }
                string formula = null;
                var sourceParts = source.Split('.');
                if (sourceParts.Length == 2)
                {
                    //indirect source
                    //"{Header}.{DependentHeader}"
                    //"FieldOid.FormOid"
                    var indirectOnDef = defs.FirstOrDefault(e => e.Header == sourceParts[1]);
                    if (indirectOnDef != null)
                    {
                        var j = defs.IndexOf(indirectOnDef);
                        var offset = j - i;
                        formula = string.Format(formula2, def.Header, offset);
                    }
                }
                else
                {
                    //direct source
                    //"{Source}"
                    //"FormOIDSource"
                    formula = string.Format(formula1, sourceParts[0]);
                }

                var validation = new DataValidation
                {
                    Type = DataValidationValues.List,
                    AllowBlank = true,
                    ShowInputMessage = true,
                    ShowErrorMessage = true,
                    Formula1 = new Formula1(formula),
                    SequenceOfReferences =
                        new ListValue<StringValue>()
                        {
                            InnerText = string.Format("{0}{1}:{0}{2}", columnName, firstRow, lastRow)
                        }
                };

                validations.Add(validation);

            }
            return validations;
        }