diff --git a/.gitignore b/.gitignore
index 23053de..5779e47 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,10 @@
+!*.dll
packages/
+AdvertisingProfitControlData/bin
+AdvertisingProfitControlData/obj
+AdvertsingProfitControl/bin
+AdvertsingProfitControl/obj
+DataTableParsingEngine/bin
+DataTableParsingEngine/obj
+SetupProject/bin
+SetupProject/obj
\ No newline at end of file
diff --git a/AdvertsingProfitControl.sln b/AdvertsingProfitControl.sln
index 58e82ca..a14930d 100644
--- a/AdvertsingProfitControl.sln
+++ b/AdvertsingProfitControl.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
-VisualStudioVersion = 15.0.26228.4
+VisualStudioVersion = 15.0.26403.3
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AdvertsingProfitControl", "AdvertsingProfitControl\AdvertsingProfitControl.csproj", "{4A45C665-5D02-4724-9CC5-C0C50CA44760}"
EndProject
@@ -9,6 +9,8 @@ Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "SetupProject", "SetupProjec
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AdvertisingProfitControlData", "AdvertisingProfitControlData\AdvertisingProfitControlData.csproj", "{E30F8B0E-DFF3-4AB7-8D0C-47BD11164E51}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataTableParsingEngine", "DataTableParsingEngine\DataTableParsingEngine.csproj", "{63CE4D0A-1F70-4692-B895-073A9B3AF5F2}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -39,6 +41,14 @@ Global
{E30F8B0E-DFF3-4AB7-8D0C-47BD11164E51}.Release|Any CPU.Build.0 = Release|Any CPU
{E30F8B0E-DFF3-4AB7-8D0C-47BD11164E51}.Release|x86.ActiveCfg = Release|Any CPU
{E30F8B0E-DFF3-4AB7-8D0C-47BD11164E51}.Release|x86.Build.0 = Release|Any CPU
+ {63CE4D0A-1F70-4692-B895-073A9B3AF5F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {63CE4D0A-1F70-4692-B895-073A9B3AF5F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {63CE4D0A-1F70-4692-B895-073A9B3AF5F2}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {63CE4D0A-1F70-4692-B895-073A9B3AF5F2}.Debug|x86.Build.0 = Debug|Any CPU
+ {63CE4D0A-1F70-4692-B895-073A9B3AF5F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {63CE4D0A-1F70-4692-B895-073A9B3AF5F2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {63CE4D0A-1F70-4692-B895-073A9B3AF5F2}.Release|x86.ActiveCfg = Release|Any CPU
+ {63CE4D0A-1F70-4692-B895-073A9B3AF5F2}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/AdvertsingProfitControl/AdvertsingProfitControl.csproj b/AdvertsingProfitControl/AdvertsingProfitControl.csproj
index c3cb457..779bfde 100644
--- a/AdvertsingProfitControl/AdvertsingProfitControl.csproj
+++ b/AdvertsingProfitControl/AdvertsingProfitControl.csproj
@@ -125,8 +125,6 @@
AboutBox.cs
-
-
Form
@@ -210,7 +208,6 @@
FrmLogConsole.cs
-
@@ -316,6 +313,10 @@
{e30f8b0e-dff3-4ab7-8d0c-47bd11164e51}
AdvertisingProfitControlData
+
+ {63ce4d0a-1f70-4692-b895-073a9b3af5f2}
+ DataTableParsingEngine
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DataTableParsingEngine/DataTableParsingEngine.csproj b/DataTableParsingEngine/DataTableParsingEngine.csproj
new file mode 100644
index 0000000..e8040b4
--- /dev/null
+++ b/DataTableParsingEngine/DataTableParsingEngine.csproj
@@ -0,0 +1,69 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {63CE4D0A-1F70-4692-B895-073A9B3AF5F2}
+ Library
+ Properties
+ DataTableParsingEngine
+ DataTableParsingEngine
+ v4.5
+ 512
+
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll
+
+
+ ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {e30f8b0e-dff3-4ab7-8d0c-47bd11164e51}
+ AdvertisingProfitControlData
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DataTableParsingEngine/Properties/AssemblyInfo.cs b/DataTableParsingEngine/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..9e64455
--- /dev/null
+++ b/DataTableParsingEngine/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("DataTableParsingEngine")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("DataTableParsingEngine")]
+[assembly: AssemblyCopyright("Copyright © 2017")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("63ce4d0a-1f70-4692-b895-073a9b3af5f2")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/AdvertsingProfitControl/RowParsing.cs b/DataTableParsingEngine/RowParser.cs
similarity index 64%
rename from AdvertsingProfitControl/RowParsing.cs
rename to DataTableParsingEngine/RowParser.cs
index ec32762..bdb3428 100644
--- a/AdvertsingProfitControl/RowParsing.cs
+++ b/DataTableParsingEngine/RowParser.cs
@@ -1,18 +1,31 @@
using System;
using System.Collections.Generic;
-using System.Text.RegularExpressions;
-using System.Windows.Forms;
using System.Linq;
+using System.Windows.Forms;
+using AdvertisingProfitControlData;
-namespace AdvertsingProfitControl
+namespace DataTableParsingEngine
{
- internal class RowParsing
+ public class RowParser
{
- public static List AdSpecialGroups = new List();
-
- public string CheckForGroupKeyWord(string cellContents)
+ ///
+ /// Clears and rebuilds the ad special list that is held in memory.
+ /// This is important as this prevents this engine from grabbing the
+ /// list from the database every time this class is called. Otherwise,
+ /// there would be noticeable lag getting the list from the SQL server.
+ ///
+ public static void BuildAdSpecialListings()
{
- var keyWord = "NoGroupFound";
+ AdSpecialGroups.Clear();
+ var db = new AdvertisingProfitControlDbContext();
+ AdSpecialGroups.AddRange(db.AdSpecials.Select(x => x.Name));
+ }
+
+ private static readonly List AdSpecialGroups = new List();
+
+ private static string CheckForGroupKeyWord(string cellContents)
+ {
+ var keyWord = string.Empty;
var query = from adI in AdSpecialGroups
where adI.Equals(cellContents, StringComparison.InvariantCultureIgnoreCase)
@@ -45,14 +58,14 @@ namespace AdvertsingProfitControl
return RowAttribute.NewRow;
}
//Determine the range to use during the looping process.
- var headerCellIndex = row.Cells.Count == Enum.GetNames(typeof(SalesTableColumns)).Length ? (int)SalesTableColumns.IsHeaderRow : (int)InventoryTableColumns.IsHeaderRow;
+ var headerCellIndex = row.Cells.Count == Enum.GetNames(typeof(TableGroupParser.SalesTableColumns)).Length ? (int)TableGroupParser.SalesTableColumns.IsHeaderRow : (int)TableGroupParser.InventoryTableColumns.IsHeaderRow;
var rowContents = new List();
var rowAttribute = RowAttribute.MemberRow;
//Get the contents of the row that's being examined and add then to a List array.
var i = 0;
foreach (DataGridViewCell cell in row.Cells)
{
- if (cell.ColumnIndex >= headerCellIndex || cell.ColumnIndex == 0) { i++; continue;}
+ if (cell.ColumnIndex >= headerCellIndex || cell.ColumnIndex == 0) { i++; continue; }
//Strip all whitespace characters from the cell, this includes vertical tabs, newlines, and any number of spaces.
var cellContentsStripped = new string(cell.EditedFormattedValue.ToString().Where(c => !char.IsWhiteSpace(c)).ToArray());
//Now remove all zeros, including any decimal points as these values are meaningless.
@@ -63,7 +76,7 @@ namespace AdvertsingProfitControl
rowContents.Add(cell.EditedFormattedValue.ToString());
}
//If the first cell contains nothing, then return as IncompleteRow.
- else if (cellContentsStripped == "" && i == (int) SalesTableColumns.AdItem)
+ else if (cellContentsStripped == "" && i == (int)TableGroupParser.SalesTableColumns.AdItem)
{
return RowAttribute.IncompleteRow;
}
@@ -80,7 +93,7 @@ namespace AdvertsingProfitControl
{
var keyWord = CheckForGroupKeyWord(rowContents[0]);
//IF a keyword is found then declare this row an AdSpecialRow.
- if (keyWord != "NoGroupFound")
+ if (keyWord != string.Empty)
{
return RowAttribute.AdSpecialRow;
}
@@ -89,51 +102,14 @@ namespace AdvertsingProfitControl
return rowAttribute;
}
- public RowAttribute GetRowAttribute(object[] row)
+ public enum RowAttribute
{
- var rowAttribute = RowAttribute.MemberRow;
-
-
-
- return rowAttribute;
+ NewRow = 0,
+ IncompleteRow = 1,
+ AdSpecialRow = 2,
+ RepeatedRow = 3,
+ MemberRow = 4,
+ HeaderRow = 5
}
-
- public void PaintDataGridViewRowGroups(DataGridView dataGridView, DataGridView companionDataGridView = null, int startIndex = 0,
- bool stopOnFirstFullGroupFound = false)
- {
-
-
- }
-
- ///
- /// Checks for the presents of a repeat command using the Reg-ex engine.
- /// If a repeat command is found it returns the line number the command
- /// specifies to repeat.
- ///
- /// The contents of Cell[0] in the row being parsed.
- /// Line number to be repeated, -1 if no command is found.
- public int CheckForRepeatCommand(string rowCommandField)
- {
- const string repeatCommandPattern = @"^repeat( line)?:? [0-9]"; //Reference sheet: https://msdn.microsoft.com/en-us/library/az24scfc.aspx
- var rgx = new Regex(repeatCommandPattern, RegexOptions.IgnoreCase);
- var lineNumber = -1;
-
- if (!rgx.IsMatch(rowCommandField)) return lineNumber;
- //Parse the string and retrieve the line number
- var numbers = Regex.Split(rowCommandField, @"\D+");
-
- lineNumber = int.Parse(numbers[1]);
- return lineNumber;
- }
- }
-
- public enum RowAttribute
- {
- NewRow = 0,
- IncompleteRow = 1,
- AdSpecialRow = 2,
- RepeatedRow = 3,
- MemberRow = 4,
- HeaderRow = 5
}
}
diff --git a/AdvertsingProfitControl/ApplicationColors.cs b/DataTableParsingEngine/TableColors.cs
similarity index 64%
rename from AdvertsingProfitControl/ApplicationColors.cs
rename to DataTableParsingEngine/TableColors.cs
index ddf64d5..5711bdd 100644
--- a/AdvertsingProfitControl/ApplicationColors.cs
+++ b/DataTableParsingEngine/TableColors.cs
@@ -1,11 +1,8 @@
using System.Drawing;
-namespace AdvertsingProfitControl
+namespace DataTableParsingEngine
{
- ///
- /// Defines the colors to be used for the rows on the DataGridViews based on their state.
- ///
- public static class ApplicationColors
+ public class TableColors
{
public static Color EditingSaved = Color.ForestGreen;
public static Color PendingEdit = Color.Yellow;
diff --git a/AdvertsingProfitControl/AdvertisingProfitControlTableHelper.cs b/DataTableParsingEngine/TableGroupParser.cs
similarity index 62%
rename from AdvertsingProfitControl/AdvertisingProfitControlTableHelper.cs
rename to DataTableParsingEngine/TableGroupParser.cs
index 1967bd3..2815f17 100644
--- a/AdvertsingProfitControl/AdvertisingProfitControlTableHelper.cs
+++ b/DataTableParsingEngine/TableGroupParser.cs
@@ -2,9 +2,9 @@
using System.Drawing;
using System.Windows.Forms;
-namespace AdvertsingProfitControl
+namespace DataTableParsingEngine
{
- internal class AdvertisingProfitControlTableHelper
+ public class TableGroupParser
{
///
/// Paints rows according to their RowAttribute and detects whether or not they are part of a group.
@@ -14,28 +14,28 @@ namespace AdvertsingProfitControl
///
/// The starting index (the row that fired the RowLeave event)
/// The DataGridView to parse.
- public void PaintRowGroupsFromIndex(int startingIndex, DataGridView dataGridView)
+ public static void PaintRowGroupsFromIndex(int startingIndex, DataGridView dataGridView)
{
//Underflow protection for the lazy.
if (startingIndex < 0)
{
return;
}
- var parser = new RowParsing();
+ var parser = new RowParser();
int isHeaderColumn;
int isMemberColumn;
int isDirtyColumn;
if (dataGridView.Columns.Count == Enum.GetNames(typeof(SalesTableColumns)).Length)
{
- isHeaderColumn = (int) SalesTableColumns.IsHeaderRow;
- isMemberColumn = (int) SalesTableColumns.IsMemberRow;
- isDirtyColumn = (int) SalesTableColumns.IsDirty;
+ isHeaderColumn = (int)SalesTableColumns.IsHeaderRow;
+ isMemberColumn = (int)SalesTableColumns.IsMemberRow;
+ isDirtyColumn = (int)SalesTableColumns.IsDirty;
}
else
{
isHeaderColumn = (int)InventoryTableColumns.IsHeaderRow;
isMemberColumn = (int)InventoryTableColumns.IsMemberRow;
- isDirtyColumn = (int) InventoryTableColumns.IsDirty;
+ isDirtyColumn = (int)InventoryTableColumns.IsDirty;
}
//Spin through the dataGridView rows starting at the row that fired the event.
for (var i = startingIndex; i < (dataGridView.RowCount - 1); i++)
@@ -43,17 +43,17 @@ namespace AdvertsingProfitControl
//Get the status of the current row.
var rowStatus = parser.GetRowAttribute(dataGridView.Rows[i]);
//IF the current row is a header row...
- if (rowStatus == RowAttribute.HeaderRow)
+ if (rowStatus == RowParser.RowAttribute.HeaderRow)
{
//Then check to see if the next row is a row header.
rowStatus = parser.GetRowAttribute(dataGridView.Rows[i + 1]);
//IF so, color code this row as White, since it is not a true group header.
- if (rowStatus == RowAttribute.HeaderRow)
+ if (rowStatus == RowParser.RowAttribute.HeaderRow)
{
//Clear the current row of its attributes.
dataGridView.Rows[i].Cells[isHeaderColumn].Value = false;
dataGridView.Rows[i].Cells[isMemberColumn].Value = false;
- dataGridView.Rows[i].DefaultCellStyle.BackColor = Color.White;
+ dataGridView.Rows[i].DefaultCellStyle.BackColor = default(Color);
return;
}
//IF the current row is not the first row in the data grid (index zero)...
@@ -62,190 +62,190 @@ namespace AdvertsingProfitControl
//The start by checking the previous row's status.
rowStatus = parser.GetRowAttribute(dataGridView.Rows[i - 1]);
//IF the previous row is a header row AND has color coding saying it is a group header, then clear the previous row's color and apply it to this row (i).
- if (rowStatus == RowAttribute.HeaderRow && (bool)dataGridView.Rows[i - 1].Cells[isHeaderColumn].EditedFormattedValue)
+ if (rowStatus == RowParser.RowAttribute.HeaderRow && (bool)dataGridView.Rows[i - 1].Cells[isHeaderColumn].EditedFormattedValue)
{
//Clear the previous row of its attributes.
dataGridView.Rows[i - 1].Cells[isHeaderColumn].Value = false;
dataGridView.Rows[i - 1].Cells[isMemberColumn].Value = false;
//This condition means the user changed the members of a group, so the old header row needs to be updated in the database.
dataGridView.Rows[i - 1].Cells[isDirtyColumn].Value = true;
- dataGridView.Rows[i - 1].HeaderCell.Style.BackColor = ApplicationColors.PendingEdit;
- dataGridView.Rows[i - 1].DefaultCellStyle.BackColor = Color.White;
+ dataGridView.Rows[i - 1].HeaderCell.Style.BackColor = TableColors.PendingEdit;
+ dataGridView.Rows[i - 1].DefaultCellStyle.BackColor = default(Color);
//Check the next row to see if its a member row before declaring the current row a header row.
rowStatus = parser.GetRowAttribute(dataGridView.Rows[i + 1]);
- if (rowStatus != RowAttribute.MemberRow)
+ if (rowStatus != RowParser.RowAttribute.MemberRow)
{
//Clear the coloring from the current row.
dataGridView.Rows[i].Cells[isHeaderColumn].Value = true;
dataGridView.Rows[i].Cells[isMemberColumn].Value = false;
- dataGridView.Rows[i].DefaultCellStyle.BackColor = Color.White;
+ dataGridView.Rows[i].DefaultCellStyle.BackColor = default(Color);
return;
}
//Set the current row as a header row.
dataGridView.Rows[i].Cells[isHeaderColumn].Value = true;
dataGridView.Rows[i].Cells[isMemberColumn].Value = false;
- dataGridView.Rows[i].DefaultCellStyle.BackColor = Color.LightGray;
+ dataGridView.Rows[i].DefaultCellStyle.BackColor = TableColors.HeaderRow;
return;
}
//IF the previous row is a header row OR if the previous row is index zero AND a member row, clear its coloring.
- if (rowStatus == RowAttribute.HeaderRow || rowStatus == RowAttribute.MemberRow && (i - 1) == 0)
+ if (rowStatus == RowParser.RowAttribute.HeaderRow || rowStatus == RowParser.RowAttribute.MemberRow && (i - 1) == 0)
{
//Clear the previous row of its attributes.
dataGridView.Rows[i - 1].Cells[isHeaderColumn].Value = false;
dataGridView.Rows[i - 1].Cells[isMemberColumn].Value = false;
- dataGridView.Rows[i - 1].DefaultCellStyle.BackColor = Color.White;
+ dataGridView.Rows[i - 1].DefaultCellStyle.BackColor = default(Color);
}
//Then check to see if the next row is a member row
rowStatus = parser.GetRowAttribute(dataGridView.Rows[i + 1]);
- if (rowStatus == RowAttribute.MemberRow)
+ if (rowStatus == RowParser.RowAttribute.MemberRow)
{
//Set the current row and check for changes.
if (!(bool)dataGridView.Rows[i].Cells[isHeaderColumn].EditedFormattedValue)
{
dataGridView.Rows[i].Cells[isDirtyColumn].Value = true;
- dataGridView.Rows[i].HeaderCell.Style.BackColor = ApplicationColors.PendingEdit;
+ dataGridView.Rows[i].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
dataGridView.Rows[i].Cells[isHeaderColumn].Value = true;
dataGridView.Rows[i].Cells[isMemberColumn].Value = false;
- dataGridView.Rows[i].DefaultCellStyle.BackColor = Color.LightGray;
+ dataGridView.Rows[i].DefaultCellStyle.BackColor = TableColors.HeaderRow;
//Set the next row as a member row.
if (!(bool)dataGridView.Rows[i + 1].Cells[isMemberColumn].EditedFormattedValue)
{
dataGridView.Rows[i + 1].Cells[isDirtyColumn].Value = true;
- dataGridView.Rows[i + 1].HeaderCell.Style.BackColor = ApplicationColors.PendingEdit;
+ dataGridView.Rows[i + 1].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
dataGridView.Rows[i + 1].Cells[isHeaderColumn].Value = false;
dataGridView.Rows[i + 1].Cells[isMemberColumn].Value = true;
- dataGridView.Rows[i + 1].DefaultCellStyle.BackColor = Color.LightBlue;
+ dataGridView.Rows[i + 1].DefaultCellStyle.BackColor = TableColors.MemberRow;
}
//IF previous row is Incomplete, then call the stable PaintRowGroups function.
- else if (rowStatus == RowAttribute.IncompleteRow)
+ else if (rowStatus == RowParser.RowAttribute.IncompleteRow)
{
- PaintRowGroups(dataGridView);
+ //PaintRowGroups(dataGridView);
}
}
else
{
//Then check to see if the next row is a member row
rowStatus = parser.GetRowAttribute(dataGridView.Rows[i + 1]);
- if (rowStatus == RowAttribute.MemberRow)
+ if (rowStatus == RowParser.RowAttribute.MemberRow)
{
//Set the current row and check for changes.
if (!(bool)dataGridView.Rows[i].Cells[isHeaderColumn].EditedFormattedValue)
{
dataGridView.Rows[i].Cells[isDirtyColumn].Value = true;
- dataGridView.Rows[i].HeaderCell.Style.BackColor = ApplicationColors.PendingEdit;
+ dataGridView.Rows[i].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
dataGridView.Rows[i].Cells[isHeaderColumn].Value = true;
dataGridView.Rows[i].Cells[isMemberColumn].Value = false;
- dataGridView.Rows[i].DefaultCellStyle.BackColor = Color.LightGray;
+ dataGridView.Rows[i].DefaultCellStyle.BackColor = TableColors.MemberRow;
//Set the next row as a member row.
if (!(bool)dataGridView.Rows[i + 1].Cells[isMemberColumn].EditedFormattedValue)
{
dataGridView.Rows[i + 1].Cells[isDirtyColumn].Value = true;
- dataGridView.Rows[i + 1].HeaderCell.Style.BackColor = ApplicationColors.PendingEdit;
+ dataGridView.Rows[i + 1].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
dataGridView.Rows[i + 1].Cells[isHeaderColumn].Value = false;
dataGridView.Rows[i + 1].Cells[isMemberColumn].Value = true;
- dataGridView.Rows[i + 1].DefaultCellStyle.BackColor = Color.LightBlue;
+ dataGridView.Rows[i + 1].DefaultCellStyle.BackColor = TableColors.MemberRow;
}
}
}
- else if (rowStatus == RowAttribute.MemberRow)
+ else if (rowStatus == RowParser.RowAttribute.MemberRow)
{
if (i > 0)
{
//Check the previous row.
rowStatus = parser.GetRowAttribute(dataGridView.Rows[i - 1]);
//IF the previous row is a member row AND is the first row in the data grid, then remove the coloring from it and the current row (i).
- if (rowStatus == RowAttribute.MemberRow && (i - 1) == 0)
+ if (rowStatus == RowParser.RowAttribute.MemberRow && (i - 1) == 0)
{
//Clear the previous row of its attributes.
dataGridView.Rows[i - 1].Cells[isHeaderColumn].Value = false;
dataGridView.Rows[i - 1].Cells[isMemberColumn].Value = false;
- dataGridView.Rows[i - 1].DefaultCellStyle.BackColor = Color.White;
+ dataGridView.Rows[i - 1].DefaultCellStyle.BackColor = default(Color);
//Check for changes in the current row.
- if ((bool) dataGridView.Rows[i].Cells[isMemberColumn].EditedFormattedValue)
+ if ((bool)dataGridView.Rows[i].Cells[isMemberColumn].EditedFormattedValue)
{
dataGridView.Rows[i].Cells[isDirtyColumn].Value = true;
- dataGridView.Rows[i].HeaderCell.Style.BackColor = ApplicationColors.PendingEdit;
+ dataGridView.Rows[i].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
//Clear the current row of its attributes.
dataGridView.Rows[i].Cells[isHeaderColumn].Value = false;
dataGridView.Rows[i].Cells[isMemberColumn].Value = false;
- dataGridView.Rows[i].DefaultCellStyle.BackColor = Color.White;
+ dataGridView.Rows[i].DefaultCellStyle.BackColor = default(Color);
}
//IF the previous row is a member row AND it also has color coding suggesting that it is a member of a group, then add the current row (i) as well.
- else if (rowStatus == RowAttribute.MemberRow && (bool)dataGridView.Rows[i - 1].Cells[isMemberColumn].EditedFormattedValue)
+ else if (rowStatus == RowParser.RowAttribute.MemberRow && (bool)dataGridView.Rows[i - 1].Cells[isMemberColumn].EditedFormattedValue)
{
//Check for changes in the current row.
if (!(bool)dataGridView.Rows[i].Cells[isMemberColumn].EditedFormattedValue)
{
dataGridView.Rows[i].Cells[isDirtyColumn].Value = true;
- dataGridView.Rows[i].HeaderCell.Style.BackColor = ApplicationColors.PendingEdit;
+ dataGridView.Rows[i].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
//Set the current row as a member row.
dataGridView.Rows[i].Cells[isHeaderColumn].Value = false;
dataGridView.Rows[i].Cells[isMemberColumn].Value = true;
- dataGridView.Rows[i].DefaultCellStyle.BackColor = Color.LightBlue;
+ dataGridView.Rows[i].DefaultCellStyle.BackColor = TableColors.MemberRow;
}
//IF the previous row is simply a member row with no coloring at all, then remove the coloring from the current row (i).
- else if (rowStatus == RowAttribute.MemberRow || rowStatus == RowAttribute.AdSpecialRow)
+ else if (rowStatus == RowParser.RowAttribute.MemberRow || rowStatus == RowParser.RowAttribute.AdSpecialRow)
{
//Check for changes in the current row.
if ((bool)dataGridView.Rows[i].Cells[isMemberColumn].EditedFormattedValue)
{
dataGridView.Rows[i].Cells[isDirtyColumn].Value = true;
- dataGridView.Rows[i].HeaderCell.Style.BackColor = ApplicationColors.PendingEdit;
+ dataGridView.Rows[i].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
//Clear the current row of its attributes.
dataGridView.Rows[i].Cells[isHeaderColumn].Value = false;
dataGridView.Rows[i].Cells[isMemberColumn].Value = false;
- dataGridView.Rows[i].DefaultCellStyle.BackColor = Color.White;
+ dataGridView.Rows[i].DefaultCellStyle.BackColor = default(Color);
}
//IF the previous row is a header row, then color it as a group header and color the current row as a member of said group.
- else if (rowStatus == RowAttribute.HeaderRow && !(bool)dataGridView.Rows[i - 1].Cells[isHeaderColumn].EditedFormattedValue)
+ else if (rowStatus == RowParser.RowAttribute.HeaderRow && !(bool)dataGridView.Rows[i - 1].Cells[isHeaderColumn].EditedFormattedValue)
{
//Set the previous row as a header row.
if (!(bool)dataGridView.Rows[i - 1].Cells[isMemberColumn].EditedFormattedValue)
{
dataGridView.Rows[i - 1].Cells[isDirtyColumn].Value = true;
- dataGridView.Rows[i - 1].HeaderCell.Style.BackColor = ApplicationColors.PendingEdit;
+ dataGridView.Rows[i - 1].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
dataGridView.Rows[i - 1].Cells[isHeaderColumn].Value = true;
dataGridView.Rows[i - 1].Cells[isMemberColumn].Value = false;
- dataGridView.Rows[i - 1].DefaultCellStyle.BackColor = Color.LightGray;
+ dataGridView.Rows[i - 1].DefaultCellStyle.BackColor = TableColors.HeaderRow;
//This condition means the user created a group so the newly made header row will need to be updated in the database as well.
dataGridView.Rows[i - 1].Cells[isDirtyColumn].Value = true;
- dataGridView.Rows[i - 1].HeaderCell.Style.BackColor = ApplicationColors.PendingEdit;
+ dataGridView.Rows[i - 1].HeaderCell.Style.BackColor = TableColors.PendingEdit;
//Check for changes in the current row.
if (!(bool)dataGridView.Rows[i].Cells[isMemberColumn].EditedFormattedValue)
{
dataGridView.Rows[i].Cells[isDirtyColumn].Value = true;
- dataGridView.Rows[i].HeaderCell.Style.BackColor = ApplicationColors.PendingEdit;
+ dataGridView.Rows[i].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
//Set the current row as a member row.
dataGridView.Rows[i].Cells[isHeaderColumn].Value = false;
dataGridView.Rows[i].Cells[isMemberColumn].Value = true;
- dataGridView.Rows[i].DefaultCellStyle.BackColor = Color.LightBlue;
+ dataGridView.Rows[i].DefaultCellStyle.BackColor = TableColors.MemberRow;
}
- else if (rowStatus == RowAttribute.HeaderRow)
+ else if (rowStatus == RowParser.RowAttribute.HeaderRow)
{
//Check for changes in the current row.
if (!(bool)dataGridView.Rows[i].Cells[isMemberColumn].EditedFormattedValue)
{
dataGridView.Rows[i].Cells[isDirtyColumn].Value = true;
- dataGridView.Rows[i].HeaderCell.Style.BackColor = ApplicationColors.PendingEdit;
+ dataGridView.Rows[i].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
//Set the current row as a member row.
dataGridView.Rows[i].Cells[isHeaderColumn].Value = false;
dataGridView.Rows[i].Cells[isMemberColumn].Value = true;
- dataGridView.Rows[i].DefaultCellStyle.BackColor = Color.LightBlue;
+ dataGridView.Rows[i].DefaultCellStyle.BackColor = TableColors.MemberRow;
}
//IF the previous row is incomplete, then call the stable PaintRowGroups function.
- else if (rowStatus == RowAttribute.IncompleteRow)
+ else if (rowStatus == RowParser.RowAttribute.IncompleteRow)
{
- PaintRowGroups(dataGridView);
+ //PaintRowGroups(dataGridView);
}
}
//ELSE the current row is the first row in the data grid, therefore it can't be a member row so remove all coloring.
@@ -254,167 +254,95 @@ namespace AdvertsingProfitControl
//Clear the current row of its attributes.
dataGridView.Rows[0].Cells[isHeaderColumn].Value = false;
dataGridView.Rows[0].Cells[isMemberColumn].Value = false;
- dataGridView.Rows[0].DefaultCellStyle.BackColor = Color.White;
+ dataGridView.Rows[0].DefaultCellStyle.BackColor = default(Color);
}
}
- else if (rowStatus == RowAttribute.AdSpecialRow)
+ else if (rowStatus == RowParser.RowAttribute.AdSpecialRow)
{
- if(i == 0) return;
- dataGridView.Rows[startingIndex].DefaultCellStyle.BackColor = Color.Silver;
+ if (i == 0) return;
+ dataGridView.Rows[startingIndex].DefaultCellStyle.BackColor = TableColors.AdSpecial;
//Get the previous row's attribute.
rowStatus = parser.GetRowAttribute(dataGridView.Rows[i - 1]);
- if (rowStatus == RowAttribute.HeaderRow)
+ if (rowStatus == RowParser.RowAttribute.HeaderRow)
{
//Check to see if the previous row sees itself as a header row, if so mark it dirty.
if ((bool)dataGridView.Rows[i - 1].Cells[isHeaderColumn].EditedFormattedValue)
{
dataGridView.Rows[i - 1].Cells[isDirtyColumn].Value = true;
- dataGridView.Rows[i - 1].HeaderCell.Style.BackColor = ApplicationColors.PendingEdit;
+ dataGridView.Rows[i - 1].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
//Clear its color coding.
dataGridView.Rows[i - 1].Cells[isHeaderColumn].Value = false;
dataGridView.Rows[i - 1].Cells[isMemberColumn].Value = false;
- dataGridView.Rows[i - 1].DefaultCellStyle.BackColor = Color.White;
+ dataGridView.Rows[i - 1].DefaultCellStyle.BackColor = default(Color);
}
//Next get the status of the next row.
rowStatus = parser.GetRowAttribute(dataGridView.Rows[i + 1]);
- if (rowStatus == RowAttribute.MemberRow)
+ if (rowStatus == RowParser.RowAttribute.MemberRow)
{
//Check to see if the next row thinks it is a member row.
if (!(bool)dataGridView.Rows[i + 1].Cells[isMemberColumn].EditedFormattedValue)
{
dataGridView.Rows[i + 1].Cells[isDirtyColumn].Value = true;
- dataGridView.Rows[i + 1].HeaderCell.Style.BackColor = ApplicationColors.PendingEdit;
+ dataGridView.Rows[i + 1].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
//Clear its color coding.
dataGridView.Rows[i + 1].Cells[isMemberColumn].Value = false;
dataGridView.Rows[i + 1].Cells[isHeaderColumn].Value = false;
- dataGridView.Rows[i + 1].DefaultCellStyle.BackColor = Color.White;
+ dataGridView.Rows[i + 1].DefaultCellStyle.BackColor = default(Color);
}
}
}
}
- public void PaintRowGroups(DataGridView dataGridView)
+ public static void PaintRowGroups(DataGridView table)
{
- var parser = new RowParsing();
- var incompleteRowsFound = 0;
- var lastHeaderIndex = -1;
- var i = 0;
- var adSpecialIndex = -1;
+
+ }
- foreach (DataGridViewRow row in dataGridView.Rows)
- {
- //Get the current row's status.
- var rowType = parser.GetRowAttribute(row);
- //If the current row is not a group header, the first row in the grid, or a new row and in fact a member row...
- if (i != 0 && rowType == RowAttribute.MemberRow && !row.IsNewRow && rowType != RowAttribute.IncompleteRow)
- {
- //Remove all coloring on the current row.
- dataGridView.Rows[i].DefaultCellStyle.BackColor = Color.White;
+ public static void PaintInventoryRowGroups(int startingIndex, DataGridView inventoryDataGridView,
+ DataGridView companionDataGridView = null)
+ {
+
+ }
- //Check to make sure the numbers are within bounds, errors occurs when an incomplete row is found at index zero (0), and the current row is one (1).
- if ((i - (1 + incompleteRowsFound)) > 0)
- {
- //Check to see if the previous row is a header row by subtracting the number of rows that are (incomplete + 1) from the total number of rows (i).
- //Adding one (1) to the incomplete count allows for checking the row right before the first incomplete row found so far to see if it's a header row.
- if (parser.GetRowAttribute(dataGridView.Rows[i - (1 + incompleteRowsFound)]) == RowAttribute.HeaderRow)
- {
- row.DefaultCellStyle.BackColor = Color.LightBlue; //Group member
- dataGridView.Rows[lastHeaderIndex].DefaultCellStyle.BackColor = Color.LightGray; //Group header
- }
- //Else if a header row was not found from the previous operation but a header row is set, then its safe to assume that this row can be a member.
- else if (lastHeaderIndex >= 0)
- {
- //Check to make sure that the last header index is underneath the Ad Special Row OR that the current row (i) is before the Ad Special Index.
- if (lastHeaderIndex > adSpecialIndex || i < adSpecialIndex)
- {
- //Assume that the current row is a member of that group header and color it as such.
- row.DefaultCellStyle.BackColor = Color.LightBlue;
- }
- }
- }
- }
- //If the current row is a potential group header AND the next row is as well remove the coloring from the current row, no need for checks.
- else if (rowType == RowAttribute.HeaderRow && parser.GetRowAttribute(dataGridView.Rows[i + 1]) == RowAttribute.HeaderRow)
- {
- dataGridView.Rows[i].DefaultCellStyle.BackColor = Color.White;
- }
- //Check to see if this row is the first row, a header index row, AND the next row is a MemberRow.
- else if (rowType == RowAttribute.HeaderRow && parser.GetRowAttribute(dataGridView.Rows[i + 1]) == RowAttribute.MemberRow && i == 0)
- {
- //IF so, set the last header index, and color code of this row along with the next row which is a MemberRow.
- lastHeaderIndex = 0;
- dataGridView.Rows[0].DefaultCellStyle.BackColor = Color.LightGray;
- dataGridView.Rows[i + 1].DefaultCellStyle.BackColor = Color.LightBlue;
- }
- //Check to see if this row is a group header.
- else if (rowType == RowAttribute.HeaderRow)
- {
- //If so, reset the incomplete rows found count, set the lastHeaderIndex to this row's index (i) and change it's color to white.
- incompleteRowsFound = 0;
- lastHeaderIndex = i;
- dataGridView.Rows[i].DefaultCellStyle.BackColor = Color.White;
- }
- //If the current row is the first row in the grid AND is not a group header then remove all color from it, since its not allowed to be a header or a member.
- else if (i == 0 && rowType == RowAttribute.MemberRow)
- {
- dataGridView.Rows[i].DefaultCellStyle.BackColor = Color.White;
- }
- //Mark an incomplete row to determine whether or not we found one and remove any coloring it may have, incomplete rows are not allowed to be members or headers.
- if (rowType == RowAttribute.IncompleteRow)
- {
- incompleteRowsFound++;
- dataGridView.Rows[i].DefaultCellStyle.BackColor = Color.White;
- }
- //
- if (rowType == RowAttribute.AdSpecialRow)
- {
- adSpecialIndex = i;
- dataGridView.Rows[i].DefaultCellStyle.BackColor = Color.Silver;
- }
- i++;
- }//end for-each
- dataGridView.Refresh();
- }//End PaintRowGroups
- }
+ public enum SalesTableColumns
+ {
+ Id = 0,
+ AdItem = 1,
+ Sold = 2,
+ SalePrice = 3,
+ TotalSales = 4,
+ Cost = 5,
+ ProfitReturn = 6,
+ TotalProfitReturn = 7,
+ IsHeaderRow = 8,
+ IsMemberRow = 9,
+ IsDirty = 10
+ }
- public enum SalesTableColumns
- {
- Id = 0,
- AdItem = 1,
- Sold = 2,
- SalePrice = 3,
- TotalSales = 4,
- Cost = 5,
- ProfitReturn = 6,
- TotalProfitReturn = 7,
- IsHeaderRow = 8,
- IsMemberRow = 9,
- IsDirty = 10
- }
+ public enum InventoryTableColumns
+ {
+ Id = 0,
+ AdItem = 1,
+ BeginningInventory = 2,
+ Recieved = 3,
+ Total = 4,
+ EndingInventory = 5,
+ IsHeaderRow = 6,
+ IsMemberRow = 7,
+ IsDirty = 8
+ }
- public enum InventoryTableColumns
- {
- Id = 0,
- AdItem = 1,
- BeginningInventory = 2,
- Recieved = 3,
- Total = 4,
- EndingInventory = 5,
- IsHeaderRow = 6,
- IsMemberRow = 7,
- IsDirty = 8
- }
-
- public enum InvoiceTableColumns
- {
- Id = 0,
- InvoiceDate = 1,
- Supplier = 2,
- InvoiceNumber = 3,
- InvoiceNetAmountAtCost = 4,
- InvoiceNote = 5,
- IsDirty = 6
+ public enum InvoiceTableColumns
+ {
+ Id = 0,
+ InvoiceDate = 1,
+ Supplier = 2,
+ InvoiceNumber = 3,
+ InvoiceNetAmountAtCost = 4,
+ InvoiceNote = 5,
+ IsDirty = 6
+ }
}
}
diff --git a/DataTableParsingEngine/packages.config b/DataTableParsingEngine/packages.config
new file mode 100644
index 0000000..9e8db31
--- /dev/null
+++ b/DataTableParsingEngine/packages.config
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file