diff --git a/ClosedXML/Excel/Tables/XLTable.cs b/ClosedXML/Excel/Tables/XLTable.cs index a090dfc..5e8f3a6 100644 --- a/ClosedXML/Excel/Tables/XLTable.cs +++ b/ClosedXML/Excel/Tables/XLTable.cs @@ -65,7 +65,7 @@ foreach (var cell in headersRow.Cells()) { var name = cell.GetString(); - if (XLHelper.IsNullOrWhiteSpace(name)) + if (XLHelper.IsNullOrWhiteSpace(name)) { name = "Column" + (cellPos + 1); cell.SetValue(name); @@ -73,7 +73,7 @@ if (_fieldNames.ContainsKey(name)) throw new ArgumentException("The header row contains more than one field name '" + name + "'."); - _fieldNames.Add(name, new XLTableField(this) {Index = cellPos++ }); + _fieldNames.Add(name, new XLTableField(this, name) {Index = cellPos++ }); } } else @@ -87,7 +87,7 @@ { var name = "Column" + i; - _fieldNames.Add(name, new XLTableField(this) {Index = i - 1 }); + _fieldNames.Add(name, new XLTableField(this, name) {Index = i - 1 }); } } } @@ -102,7 +102,7 @@ Int32 cellPos = 0; foreach(var name in fieldNames) { - _fieldNames.Add(name, new XLTableField(this) { Index = cellPos++, Name = name }); + _fieldNames.Add(name, new XLTableField(this, name) { Index = cellPos++ }); } } @@ -164,8 +164,8 @@ public Boolean ShowColumnStripes { get; set; } private Boolean _showAutoFilter; - public Boolean ShowAutoFilter { - get { return _showHeaderRow && _showAutoFilter; } + public Boolean ShowAutoFilter { + get { return _showHeaderRow && _showAutoFilter; } set { _showAutoFilter = value; } } public XLTableTheme Theme { get; set; } @@ -450,7 +450,7 @@ _uniqueNames.Add(c.GetString()); co++; } - + headersRow.Clear(); RangeAddress.FirstAddress = new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber + 1, RangeAddress.FirstAddress.ColumnNumber, @@ -462,7 +462,7 @@ else { using(var asRange = Worksheet.Range( - RangeAddress.FirstAddress.RowNumber - 1 , + RangeAddress.FirstAddress.RowNumber - 1 , RangeAddress.FirstAddress.ColumnNumber, RangeAddress.LastAddress.RowNumber, RangeAddress.LastAddress.ColumnNumber @@ -473,7 +473,7 @@ if (firstRow.IsEmpty(true)) { rangeRow = firstRow; - RangeAddress.FirstAddress = new XLAddress(Worksheet, + RangeAddress.FirstAddress = new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber - 1, RangeAddress.FirstAddress.ColumnNumber, RangeAddress.FirstAddress.FixedRow, @@ -499,7 +499,7 @@ } Int32 co = 1; - foreach (var name in FieldNames.Keys) + foreach (var name in FieldNames.Values.Select(f => f.Name)) { rangeRow.Cell(co).SetValue(name); co++; @@ -513,7 +513,7 @@ public IXLTable SetShowHeaderRow() { return SetShowHeaderRow(true); - } + } public IXLTable SetShowHeaderRow(Boolean value) { ShowHeaderRow = value; @@ -529,4 +529,4 @@ } } -} \ No newline at end of file +} diff --git a/ClosedXML/Excel/Tables/XLTableField.cs b/ClosedXML/Excel/Tables/XLTableField.cs index 0f98646..19e9655 100644 --- a/ClosedXML/Excel/Tables/XLTableField.cs +++ b/ClosedXML/Excel/Tables/XLTableField.cs @@ -5,22 +5,28 @@ internal class XLTableField: IXLTableField { private XLTable table; - public XLTableField(XLTable table) + public XLTableField(XLTable table, String name) { this.table = table; + this.name = name; } public Int32 Index { get; internal set; } - public String Name + private String name; + + public String Name { get { - return table.HeadersRow().Cell(Index + 1).GetString(); + return name; } set { - table.HeadersRow().Cell(Index + 1).SetValue(value); + if (table.ShowHeaderRow) + table.HeadersRow().Cell(Index + 1).SetValue(value); + + name = value; } } @@ -28,18 +34,18 @@ public String TotalsRowLabel { get { return totalsRowLabel; } - set + set { totalsRowFunction = XLTotalsRowFunction.None; table.TotalsRow().Cell(Index + 1).SetValue(value); - totalsRowLabel = value; + totalsRowLabel = value; } } public String TotalsRowFormulaA1 { get { return table.TotalsRow().Cell(Index + 1).FormulaA1; } - set + set { totalsRowFunction = XLTotalsRowFunction.Custom; table.TotalsRow().Cell(Index + 1).FormulaA1 = value; @@ -59,7 +65,7 @@ public XLTotalsRowFunction TotalsRowFunction { get { return totalsRowFunction; } - set + set { if (value != XLTotalsRowFunction.None && value != XLTotalsRowFunction.Custom) { @@ -85,7 +91,7 @@ cell.Style.NumberFormat = lastCell.Style.NumberFormat; } } - totalsRowFunction = value; + totalsRowFunction = value; } } } diff --git a/ClosedXML_Tests/Excel/Tables/TablesTests.cs b/ClosedXML_Tests/Excel/Tables/TablesTests.cs index 7ebf9bc..d3c29df 100644 --- a/ClosedXML_Tests/Excel/Tables/TablesTests.cs +++ b/ClosedXML_Tests/Excel/Tables/TablesTests.cs @@ -1,10 +1,10 @@ -using System; +using ClosedXML.Excel; +using NUnit.Framework; +using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; -using ClosedXML.Excel; -using NUnit.Framework; namespace ClosedXML_Tests.Excel { @@ -24,8 +24,8 @@ public void CanSaveTableCreatedFromEmptyDataTable() { var dt = new DataTable("sheet1"); - dt.Columns.Add("col1", typeof (string)); - dt.Columns.Add("col2", typeof (double)); + dt.Columns.Add("col1", typeof(string)); + dt.Columns.Add("col2", typeof(double)); var wb = new XLWorkbook(); wb.AddWorksheet(dt); @@ -128,8 +128,8 @@ public void TableCreatedFromEmptyDataTable() { var dt = new DataTable("sheet1"); - dt.Columns.Add("col1", typeof (string)); - dt.Columns.Add("col2", typeof (double)); + dt.Columns.Add("col1", typeof(string)); + dt.Columns.Add("col2", typeof(double)); var wb = new XLWorkbook(); IXLWorksheet ws = wb.AddWorksheet("Sheet1"); @@ -177,13 +177,9 @@ row = table.DataRange.InsertRowsAbove(1).First(); row.Field("Value").Value = 1; - //wb.SaveAs(@"D:\Excel Files\ForTesting\Sandbox.xlsx"); - Assert.AreEqual(1, ws.Cell(2, 1).GetDouble()); Assert.AreEqual(2, ws.Cell(3, 1).GetDouble()); Assert.AreEqual(3, ws.Cell(4, 1).GetDouble()); - - //wb.SaveAs(@"D:\Excel Files\ForTesting\Sandbox.xlsx"); } [Test] @@ -196,20 +192,17 @@ IXLTable table = ws.Range("A1:A2").CreateTable(); table.SetShowTotalsRow() .Field(0).TotalsRowFunction = XLTotalsRowFunction.Sum; - //wb.SaveAs(@"D:\Excel Files\ForTesting\Sandbox1.xlsx"); + IXLTableRow row = table.DataRange.FirstRow(); row.Field("Value").Value = 3; row = row.InsertRowsAbove(1).First(); row.Field("Value").Value = 2; row = row.InsertRowsAbove(1).First(); row.Field("Value").Value = 1; - //wb.SaveAs(@"D:\Excel Files\ForTesting\Sandbox2.xlsx"); Assert.AreEqual(1, ws.Cell(2, 1).GetDouble()); Assert.AreEqual(2, ws.Cell(3, 1).GetDouble()); Assert.AreEqual(3, ws.Cell(4, 1).GetDouble()); - - //wb.SaveAs(@"D:\Excel Files\ForTesting\Sandbox.xlsx"); } [Test] @@ -230,8 +223,6 @@ row = table.DataRange.InsertRowsBelow(1).First(); row.Field("Value").Value = 3; - //wb.SaveAs(@"D:\Excel Files\ForTesting\Sandbox.xlsx"); - Assert.AreEqual(1, ws.Cell(2, 1).GetDouble()); Assert.AreEqual(2, ws.Cell(3, 1).GetDouble()); Assert.AreEqual(3, ws.Cell(4, 1).GetDouble()); @@ -258,8 +249,6 @@ Assert.AreEqual(1, ws.Cell(2, 1).GetDouble()); Assert.AreEqual(2, ws.Cell(3, 1).GetDouble()); Assert.AreEqual(3, ws.Cell(4, 1).GetDouble()); - - //wb.SaveAs(@"D:\Excel Files\ForTesting\Sandbox.xlsx"); } [Test] @@ -272,11 +261,13 @@ .CellBelow().SetValue("B") .CellBelow().SetValue("C"); - ws.RangeUsed().CreateTable().SetShowHeaderRow(false); + IXLTable table = ws.RangeUsed().CreateTable(); - IXLTable table = ws.Tables.First(); + Assert.AreEqual("Categories", table.Fields.First().Name); - //wb.SaveAs(@"D:\Excel Files\ForTesting\Sandbox1.xlsx"); + table.SetShowHeaderRow(false); + + Assert.AreEqual("Categories", table.Fields.First().Name); Assert.IsTrue(ws.Cell(1, 1).IsEmpty(true)); Assert.AreEqual(null, table.HeadersRow()); @@ -290,15 +281,11 @@ Assert.AreNotEqual(null, headerRow); Assert.AreEqual("Categories", headerRow.Cell(1).GetString()); - table.SetShowHeaderRow(false); ws.FirstCell().SetValue("x"); table.SetShowHeaderRow(); - //wb.SaveAs(@"D:\Excel Files\ForTesting\Sandbox2.xlsx"); - - //wb.SaveAs(@"D:\Excel Files\ForTesting\Sandbox3.xlsx"); Assert.AreEqual("x", ws.FirstCell().GetString()); Assert.AreEqual("Categories", ws.Cell("A2").GetString()); @@ -331,6 +318,15 @@ Assert.AreEqual("LName", nameBefore); Assert.AreEqual("LastName", nameAfter); Assert.AreEqual("LastName", cellValue); + + tbl.ShowHeaderRow = false; + tbl.Field(tbl.Fields.Last().Index).Name = "LastNameChanged"; + nameAfter = tbl.Field(tbl.Fields.Last().Index).Name; + Assert.AreEqual("LastNameChanged", nameAfter); + + tbl.SetShowHeaderRow(true); + nameAfter = tbl.Cell("B1").Value.ToString(); + Assert.AreEqual("LastNameChanged", nameAfter); } } -} \ No newline at end of file +}