diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/IXLCell.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/IXLCell.cs index afa2644..b506d05 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/IXLCell.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/IXLCell.cs @@ -201,7 +201,7 @@ XLHyperlink Hyperlink { get; set; } IXLWorksheet Worksheet { get; } - IXLDataValidation DataValidation { get; } + IXLDataValidation SetDataValidation(); IXLCells InsertCellsAbove(int numberOfRows); diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs index 6154405..d899eb1 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs @@ -966,10 +966,6 @@ } } - IXLDataValidation IXLCell.DataValidation - { - get { return DataValidation; } - } public IXLCells InsertCellsAbove(int numberOfRows) { @@ -2208,5 +2204,10 @@ return Worksheet.DataValidations.Any(dv => dv.Ranges.Contains(asRange) && dv.IsDirty()); } } + + public IXLDataValidation SetDataValidation() + { + return DataValidation; + } } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLBaseCollection.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLBaseCollection.cs index 85d6c6f..118db37 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLBaseCollection.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLBaseCollection.cs @@ -9,7 +9,7 @@ IXLStyle Style { get; set; } - IXLDataValidation DataValidation { get; } + IXLDataValidation SetDataValidation(); /// /// Creates a named range out of these ranges. diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeBase.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeBase.cs index fb72abf..ed77823 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeBase.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeBase.cs @@ -64,7 +64,7 @@ IXLHyperlinks Hyperlinks { get; } - IXLDataValidation DataValidation { get; } + IXLDataValidation SetDataValidation(); /// /// Returns the collection of cells. diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRanges.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRanges.cs index 50e292f..2a2458c 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRanges.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRanges.cs @@ -25,7 +25,7 @@ IXLStyle Style { get; set; } - IXLDataValidation DataValidation { get; } + IXLDataValidation SetDataValidation(); /// /// Creates a named range out of these ranges. diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs index 3a6582d..e034671 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs @@ -192,10 +192,7 @@ } } - IXLDataValidation IXLRangeBase.DataValidation - { - get { return DataValidation; } - } + public Object Value { @@ -1805,5 +1802,10 @@ RangeAddress.Worksheet.RangeShiftedColumns -= WorksheetRangeShiftedColumns; _subscribedToShiftedColumns = false; } + + public IXLDataValidation SetDataValidation() + { + return DataValidation; + } } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRanges.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRanges.cs index 8c68c0e..9d61fd0 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRanges.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRanges.cs @@ -216,5 +216,10 @@ { return _ranges.Aggregate(0, (current, r) => current ^ r.GetHashCode()); } + + public IXLDataValidation SetDataValidation() + { + return DataValidation; + } } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/DataValidation.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/DataValidation.cs index 1f946ee..fdbe3cc 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/DataValidation.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/DataValidation.cs @@ -46,10 +46,10 @@ var ws = wb.Worksheets.Add("Data Validation"); // Decimal between 1 and 5 - ws.Cell(1, 1).DataValidation.Decimal.Between(1, 5); + ws.Cell(1, 1).SetDataValidation().Decimal.Between(1, 5); // Whole number equals 2 - var dv1 = ws.Range("A2:A3").DataValidation; + var dv1 = ws.Range("A2:A3").SetDataValidation(); dv1.WholeNumber.EqualTo(2); // Change the error message dv1.ErrorStyle = XLErrorStyle.Warning; @@ -57,7 +57,7 @@ dv1.ErrorMessage = "This cell only allows the number 2."; // Date after the millenium - var dv2 = ws.Cell("A4").DataValidation; + var dv2 = ws.Cell("A4").SetDataValidation(); dv2.Date.EqualOrGreaterThan(new DateTime(2000, 1, 1)); // Change the input message dv2.InputTitle = "Can't party like it's 1999."; @@ -66,57 +66,57 @@ // From a list ws.Cell("C1").Value = "Yes"; ws.Cell("C2").Value = "No"; - ws.Cell("A5").DataValidation.List(ws.Range("C1:C2")); + ws.Cell("A5").SetDataValidation().List(ws.Range("C1:C2")); ws.Range("C1:C2").AddToNamed("YesNo"); - ws.Cell("A6").DataValidation.List("=YesNo"); + ws.Cell("A6").SetDataValidation().List("=YesNo"); // Intersecting dataValidations - ws.Range("B1:B4").DataValidation.WholeNumber.EqualTo(1); - ws.Range("B3:B4").DataValidation.WholeNumber.EqualTo(2); + ws.Range("B1:B4").SetDataValidation().WholeNumber.EqualTo(1); + ws.Range("B3:B4").SetDataValidation().WholeNumber.EqualTo(2); // Validate with multiple ranges var ws2 = wb.Worksheets.Add("Validate Ranges"); var rng1 = ws2.Ranges("A1:B2,B4:D7,F4:G5"); rng1.Style.Fill.SetBackgroundColor(XLColor.YellowGreen); - var rng1Validation = rng1.DataValidation; + var rng1Validation = rng1.SetDataValidation(); rng1Validation.Decimal.EqualTo(1); rng1Validation.IgnoreBlanks = false; var rng2 = ws2.Range("A11:E14"); rng2.Style.Fill.SetBackgroundColor(XLColor.YellowGreen); - var rng2Validation = rng2.DataValidation; + var rng2Validation = rng2.SetDataValidation(); rng2Validation.Decimal.EqualTo(2); rng2Validation.IgnoreBlanks = false; var rng3 = ws2.Range("B2:B12"); //rng3.Style.Fill.SetBackgroundColor(XLColor.YellowGreen); - var rng3Validation = rng3.DataValidation; + var rng3Validation = rng3.SetDataValidation(); rng3Validation.Decimal.EqualTo(3); rng3Validation.IgnoreBlanks = true; var rng4 = ws2.Range("D5:D6"); //rng4.Style.Fill.SetBackgroundColor(XLColor.YellowGreen); - var rng4Validation = rng4.DataValidation; + var rng4Validation = rng4.SetDataValidation(); rng4Validation.Decimal.EqualTo(4); rng4Validation.IgnoreBlanks = true; var rng5 = ws2.Range("C13:C14"); //rng5.Style.Fill.SetBackgroundColor(XLColor.YellowGreen); - var rng5Validation = rng5.DataValidation; + var rng5Validation = rng5.SetDataValidation(); rng5Validation.Decimal.EqualTo(5); rng5Validation.IgnoreBlanks = true; var rng6 = ws2.Range("D11:D12"); //rng6.Style.Fill.SetBackgroundColor(XLColor.YellowGreen); - var rng6Validation =rng6.DataValidation; + var rng6Validation = rng6.SetDataValidation(); rng6Validation.Decimal.EqualTo(5); rng6Validation.IgnoreBlanks = true; var rng7 = ws2.Range("G4:G5"); //rng7.Style.Fill.SetBackgroundColor(XLColor.YellowGreen); - var rng7Validation = rng7.DataValidation; + var rng7Validation = rng7.SetDataValidation(); rng7Validation.Decimal.EqualTo(5); rng7Validation.IgnoreBlanks = true; diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj b/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj index 6ed43c5..8432bdc 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj @@ -78,6 +78,7 @@ + diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/DataValidations/DataValidationTests.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/DataValidations/DataValidationTests.cs new file mode 100644 index 0000000..70d392e --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/DataValidations/DataValidationTests.cs @@ -0,0 +1,38 @@ +using System; +using System.IO; +using System.Text; +using System.Collections.Generic; +using System.Linq; +using ClosedXML.Excel; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace ClosedXML_Tests.Excel.DataValidations +{ + /// + /// Summary description for UnitTest1 + /// + [TestClass] + public class DataValidationTests + { + [TestMethod] + public void Validation_persists_on_Worksheet_DataValidations() + { + var wb = new XLWorkbook(); + var ws = wb.Worksheets.Add("People"); + + ws.FirstCell().SetValue("Categories") + .CellBelow().SetValue("A") + .CellBelow().SetValue("B") + .CellBelow().SetValue("") + .CellBelow().SetValue("D"); + + var table = ws.RangeUsed().CreateTable(); + + var dv = table.DataRange.SetDataValidation(); + dv.ErrorTitle = "Error"; + + Assert.AreEqual("Error", ws.DataValidations.Single().ErrorTitle); + } + + } +}