Files
advertising-profit-control/DataTableParsingEngine/TableGroupParser.cs
T

556 lines
36 KiB
C#

using System;
using System.Drawing;
using System.Windows.Forms;
namespace DataTableParsingEngine
{
public class TableGroupParser
{
/// <summary>
/// Paints rows according to their RowAttribute and detects whether or not they are part of a group.
/// This function offers a faster method of determining all of this by starting at the row index that
/// fired the row leave even. As opposed to the PaintRowGroups function which spins through all the
/// DataGridView's rows.
/// </summary>
/// <param name="table">The DataGridView to parse.</param>
/// <param name="startingIndex">The starting index (the row that fired the RowLeave event)</param>
/// <param name="fullScan">True to force a full scan of all rows beginning at the starting index.</param>
public static bool PaintRowGroups(DataGridView table, int startingIndex, bool fullScan = false)
{
var parser = new RowParser();
var isHeaderColumn = (int) SalesTableColumns.IsHeaderRow;
var isMemberColumn = (int) SalesTableColumns.IsMemberRow;
var isDirtyColumn = (int) SalesTableColumns.IsDirty;
var updatesOccured = false;
if (table.ColumnCount < Enum.GetNames(typeof(SalesTableColumns)).Length)
{
isHeaderColumn = (int) InventoryTableColumns.IsHeaderRow;
isMemberColumn = (int) InventoryTableColumns.IsMemberRow;
isDirtyColumn = (int) InventoryTableColumns.IsDirty;
}
//Spin through the dataGridView rows starting at the row that fired the event.
for (var i = startingIndex; i < (table.RowCount - 1); i++)
{
//Get the status of the current row.
var currentRowAttribute = parser.GetRowAttribute(table.Rows[i]);
//Get the previous row's status.
var previousRow = RowParser.RowAttribute.UnAssigned;
if (i > 0)
{
previousRow = parser.GetRowAttribute(table.Rows[i - 1]);
}
//Get the next row's attribute.
var nextRow = RowParser.RowAttribute.UnAssigned;
if ((i + 1) < table.RowCount)
{
nextRow = parser.GetRowAttribute(table.Rows[i + 1]);
}
//If current row is a header row...
if (currentRowAttribute == RowParser.RowAttribute.HeaderRow)
{
//...and the current row is index zero or the previous row is a header row
//then clear color coding from both.
if (previousRow == RowParser.RowAttribute.HeaderRow)
{
//Check the previous row's attributes to see if it needs to be marked for updating.
if ((bool) table.Rows[i - 1].Cells[isHeaderColumn].EditedFormattedValue ||
(bool) table.Rows[i - 1].Cells[isMemberColumn].EditedFormattedValue)
{
//The previous row had some attributes set, so mark the previous row for updating.
table.Rows[i - 1].Cells[isDirtyColumn].Value = true;
updatesOccured = true;
table.Rows[i - 1].HeaderCell.Style.BackColor = TableColors.PendingEdit;
table.Rows[i - 1].DefaultCellStyle.BackColor = default(Color);
}
//Clear the previous row of its attributes.
table.Rows[i - 1].Cells[isHeaderColumn].Value = false;
table.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.
//Check the next row to see if its a member row before declaring the current row a header row.
if (nextRow == RowParser.RowAttribute.MemberRow)
{
if (!(bool)table.Rows[i].Cells[isHeaderColumn].EditedFormattedValue ||
(bool) table.Rows[i].Cells[isMemberColumn].EditedFormattedValue)
{
//The current row had some attributes set, so mark the previous row for updating.
table.Rows[i].Cells[isDirtyColumn].Value = true;
updatesOccured = true;
table.Rows[i].HeaderCell.Style.BackColor = TableColors.PendingEdit;
table.Rows[i].DefaultCellStyle.BackColor = default(Color);
}
//Set the current row as a header row.
table.Rows[i].Cells[isHeaderColumn].Value = true;
table.Rows[i].Cells[isMemberColumn].Value = false;
table.Rows[i].DefaultCellStyle.BackColor = TableColors.HeaderRow;
//Mark the next row as a member row.
if ((bool) table.Rows[i + 1].Cells[isHeaderColumn].EditedFormattedValue ||
!(bool)table.Rows[i + 1].Cells[isMemberColumn].EditedFormattedValue)
{
//The next row had some attributes set, so mark the previous row for updating.
table.Rows[i + 1].Cells[isDirtyColumn].Value = true;
updatesOccured = true;
table.Rows[i + 1].HeaderCell.Style.BackColor = TableColors.PendingEdit;
table.Rows[i + 1].DefaultCellStyle.BackColor = default(Color);
}
table.Rows[i + 1].Cells[isHeaderColumn].Value = false;
table.Rows[i + 1].Cells[isMemberColumn].Value = true;
table.Rows[i + 1].DefaultCellStyle.BackColor = TableColors.MemberRow;
}
else
{
//If the current row is not a member row then clear the current row of any attributes it may have.
if ((bool) table.Rows[i].Cells[isHeaderColumn].EditedFormattedValue ||
(bool) table.Rows[i].Cells[isMemberColumn].EditedFormattedValue)
{
//The current row had some attributes set, so mark the previous row for updating.
table.Rows[i].Cells[isDirtyColumn].Value = true;
updatesOccured = true;
table.Rows[i].HeaderCell.Style.BackColor = TableColors.PendingEdit;
table.Rows[i].DefaultCellStyle.BackColor = default(Color);
}
//Clear the current row's attributes.
table.Rows[i].Cells[isHeaderColumn].Value = false;
table.Rows[i].Cells[isMemberColumn].Value = false;
table.Rows[i].DefaultCellStyle.BackColor = default(Color);
if (!fullScan) return updatesOccured;
}
}
else
{
//Else if check to see if the previous row exists.
if (previousRow == RowParser.RowAttribute.UnAssigned)
{
//This indicates that there is no previous row, so its safe to assume that
//we can simply continue on to the next row.
continue;
}
if (nextRow == RowParser.RowAttribute.MemberRow)
{
continue;
}
//If the current row is not a member row then clear the current row of any attributes it may have.
if ((bool)table.Rows[i].Cells[isHeaderColumn].EditedFormattedValue ||
(bool)table.Rows[i].Cells[isMemberColumn].EditedFormattedValue)
{
//The current row had some attributes set, so mark the previous row for updating.
table.Rows[i].Cells[isDirtyColumn].Value = true;
updatesOccured = true;
table.Rows[i].HeaderCell.Style.BackColor = TableColors.PendingEdit;
table.Rows[i].DefaultCellStyle.BackColor = default(Color);
}
//Clear the current row's attributes.
table.Rows[i].Cells[isHeaderColumn].Value = false;
table.Rows[i].Cells[isMemberColumn].Value = false;
table.Rows[i].DefaultCellStyle.BackColor = default(Color);
if(!fullScan) return updatesOccured;
}
}
if (currentRowAttribute == RowParser.RowAttribute.MemberRow)
{
//Check to see if the previous row is a header row.
if (previousRow == RowParser.RowAttribute.HeaderRow)
{
//Set the previous row as a header.
if (!(bool)table.Rows[i - 1].Cells[isHeaderColumn].EditedFormattedValue ||
(bool)table.Rows[i - 1].Cells[isMemberColumn].EditedFormattedValue)
{
//The current row had some attributes set, so mark the current row for updating.
table.Rows[i - 1].Cells[isDirtyColumn].Value = true;
updatesOccured = true;
table.Rows[i - 1].HeaderCell.Style.BackColor = TableColors.PendingEdit;
table.Rows[i - 1].DefaultCellStyle.BackColor = default(Color);
}
table.Rows[i - 1].Cells[isHeaderColumn].Value = true;
table.Rows[i - 1].Cells[isMemberColumn].Value = false;
table.Rows[i - 1].DefaultCellStyle.BackColor = TableColors.HeaderRow;
//Mark current row as member row.
if ((bool)table.Rows[i].Cells[isHeaderColumn].EditedFormattedValue ||
!(bool)table.Rows[i].Cells[isMemberColumn].EditedFormattedValue)
{
//The current row had some attributes set, so mark the current row for updating.
table.Rows[i].Cells[isDirtyColumn].Value = true;
updatesOccured = true;
table.Rows[i].HeaderCell.Style.BackColor = TableColors.PendingEdit;
table.Rows[i].DefaultCellStyle.BackColor = default(Color);
}
table.Rows[i].Cells[isHeaderColumn].Value = false;
table.Rows[i].Cells[isMemberColumn].Value = true;
table.Rows[i].DefaultCellStyle.BackColor = TableColors.MemberRow;
}
else if (previousRow == RowParser.RowAttribute.MemberRow)
{
//Check to see if the previous row is set as a member row.
if ((bool) table.Rows[i - 1].Cells[isMemberColumn].EditedFormattedValue)
{
//Assume that the current row is part of the group.
if ((bool) table.Rows[i].Cells[isHeaderColumn].EditedFormattedValue ||
!(bool) table.Rows[i].Cells[isMemberColumn].EditedFormattedValue)
{
//The current row had some attributes set, so mark the current row for updating.
table.Rows[i].Cells[isDirtyColumn].Value = true;
updatesOccured = true;
table.Rows[i].HeaderCell.Style.BackColor = TableColors.PendingEdit;
table.Rows[i].DefaultCellStyle.BackColor = default(Color);
}
table.Rows[i].Cells[isHeaderColumn].Value = false;
table.Rows[i].Cells[isMemberColumn].Value = true;
table.Rows[i].DefaultCellStyle.BackColor = TableColors.MemberRow;
}
else
{
if ((bool)table.Rows[i].Cells[isHeaderColumn].EditedFormattedValue ||
(bool)table.Rows[i].Cells[isMemberColumn].EditedFormattedValue)
{
//The current row had some attributes set, so mark the current row for updating.
table.Rows[i].Cells[isDirtyColumn].Value = true;
updatesOccured = true;
table.Rows[i].HeaderCell.Style.BackColor = TableColors.PendingEdit;
table.Rows[i].DefaultCellStyle.BackColor = default(Color);
}
table.Rows[i].Cells[isHeaderColumn].Value = false;
table.Rows[i].Cells[isMemberColumn].Value = false;
table.Rows[i].DefaultCellStyle.BackColor = default(Color);
}
}
else
{
if ((bool)table.Rows[i].Cells[isHeaderColumn].EditedFormattedValue ||
(bool)table.Rows[i].Cells[isMemberColumn].EditedFormattedValue)
{
//The current row had some attributes set, so mark the current row for updating.
table.Rows[i].Cells[isDirtyColumn].Value = true;
updatesOccured = true;
table.Rows[i].HeaderCell.Style.BackColor = TableColors.PendingEdit;
table.Rows[i].DefaultCellStyle.BackColor = default(Color);
}
table.Rows[i].Cells[isHeaderColumn].Value = false;
table.Rows[i].Cells[isMemberColumn].Value = false;
}
}
}
return updatesOccured;
}
public static void PaintInventoryRowGroups(int startingIndex, DataGridView inventoryDataGridView,
DataGridView masterDataGridView)
{
var isHeaderColumn = (int)InventoryTableColumns.IsHeaderRow;
var isMemberColumn = (int)InventoryTableColumns.IsMemberRow;
var isDirtyColumn = (int)InventoryTableColumns.IsDirty;
var masterHeaderColumn = (int)SalesTableColumns.IsHeaderRow;
var masterMemberColumn = (int)SalesTableColumns.IsMemberRow;
var parser = new RowParser();
//Spin through the dataGridView rows starting at the row that fired the event.
for (var i = startingIndex; i < (inventoryDataGridView.RowCount - 1); i++)
{
//Get the status of the current row.
var rowStatus = parser.GetRowAttribute(masterDataGridView.Rows[i]);
//IF the current row is a header row...
if (rowStatus == RowParser.RowAttribute.HeaderRow)
{
//Then check to see if the next row is a row header.
rowStatus = parser.GetRowAttribute(masterDataGridView.Rows[i + 1]);
//IF so, color code this row as White, since it is not a true group header.
if (rowStatus == RowParser.RowAttribute.HeaderRow)
{
//Clear the current row of its attributes.
inventoryDataGridView.Rows[i].Cells[isHeaderColumn].Value = false;
inventoryDataGridView.Rows[i].Cells[isMemberColumn].Value = false;
inventoryDataGridView.Rows[i].DefaultCellStyle.BackColor = default(Color);
return;
}
//IF the current row is not the first row in the data grid (index zero)...
if (i > 0)
{
//The start by checking the previous row's status.
rowStatus = parser.GetRowAttribute(masterDataGridView.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 == RowParser.RowAttribute.HeaderRow && (bool)masterDataGridView.Rows[i - 1].Cells[masterHeaderColumn].EditedFormattedValue)
{
//Clear the previous row of its attributes.
inventoryDataGridView.Rows[i - 1].Cells[isHeaderColumn].Value = false;
inventoryDataGridView.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.
inventoryDataGridView.Rows[i - 1].Cells[isDirtyColumn].Value = true;
inventoryDataGridView.Rows[i - 1].HeaderCell.Style.BackColor = TableColors.PendingEdit;
inventoryDataGridView.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(masterDataGridView.Rows[i + 1]);
if (rowStatus != RowParser.RowAttribute.MemberRow)
{
//Clear the coloring from the current row.
inventoryDataGridView.Rows[i].Cells[isHeaderColumn].Value = true;
inventoryDataGridView.Rows[i].Cells[isMemberColumn].Value = false;
inventoryDataGridView.Rows[i].DefaultCellStyle.BackColor = default(Color);
return;
}
//Set the current row as a header row.
inventoryDataGridView.Rows[i].Cells[isHeaderColumn].Value = true;
inventoryDataGridView.Rows[i].Cells[isMemberColumn].Value = false;
inventoryDataGridView.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 == RowParser.RowAttribute.HeaderRow || rowStatus == RowParser.RowAttribute.MemberRow && (i - 1) == 0)
{
//Set the current row and check for changes.
if ((bool)masterDataGridView.Rows[i - 1].Cells[masterMemberColumn].EditedFormattedValue)
{
inventoryDataGridView.Rows[i - 1].Cells[isDirtyColumn].Value = true;
inventoryDataGridView.Rows[i - 1].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
//Clear the previous row of its attributes.
inventoryDataGridView.Rows[i - 1].Cells[isHeaderColumn].Value = false;
inventoryDataGridView.Rows[i - 1].Cells[isMemberColumn].Value = false;
inventoryDataGridView.Rows[i - 1].DefaultCellStyle.BackColor = default(Color);
}
//Then check to see if the next row is a member row
rowStatus = parser.GetRowAttribute(masterDataGridView.Rows[i + 1]);
if (rowStatus == RowParser.RowAttribute.MemberRow)
{
//Set the current row and check for changes.
if (!(bool)masterDataGridView.Rows[i].Cells[masterHeaderColumn].EditedFormattedValue)
{
inventoryDataGridView.Rows[i].Cells[isDirtyColumn].Value = true;
inventoryDataGridView.Rows[i].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
inventoryDataGridView.Rows[i].Cells[isHeaderColumn].Value = true;
inventoryDataGridView.Rows[i].Cells[isMemberColumn].Value = false;
inventoryDataGridView.Rows[i].DefaultCellStyle.BackColor = TableColors.HeaderRow;
//Set the next row as a member row.
if (!(bool)masterDataGridView.Rows[i + 1].Cells[masterMemberColumn].EditedFormattedValue)
{
inventoryDataGridView.Rows[i + 1].Cells[isDirtyColumn].Value = true;
inventoryDataGridView.Rows[i + 1].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
inventoryDataGridView.Rows[i + 1].Cells[isHeaderColumn].Value = false;
inventoryDataGridView.Rows[i + 1].Cells[isMemberColumn].Value = true;
inventoryDataGridView.Rows[i + 1].DefaultCellStyle.BackColor = TableColors.MemberRow;
}
}
else
{
//Then check to see if the next row is a member row
rowStatus = parser.GetRowAttribute(masterDataGridView.Rows[i + 1]);
if (rowStatus != RowParser.RowAttribute.MemberRow) continue;
//Set the current row and check for changes.
if (!(bool)masterDataGridView.Rows[i].Cells[masterHeaderColumn].EditedFormattedValue)
{
inventoryDataGridView.Rows[i].Cells[isDirtyColumn].Value = true;
inventoryDataGridView.Rows[i].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
inventoryDataGridView.Rows[i].Cells[isHeaderColumn].Value = true;
inventoryDataGridView.Rows[i].Cells[isMemberColumn].Value = false;
inventoryDataGridView.Rows[i].DefaultCellStyle.BackColor = TableColors.MemberRow;
//Set the next row as a member row.
if (!(bool)masterDataGridView.Rows[i + 1].Cells[masterMemberColumn].EditedFormattedValue)
{
inventoryDataGridView.Rows[i + 1].Cells[isDirtyColumn].Value = true;
inventoryDataGridView.Rows[i + 1].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
inventoryDataGridView.Rows[i + 1].Cells[isHeaderColumn].Value = false;
inventoryDataGridView.Rows[i + 1].Cells[isMemberColumn].Value = true;
inventoryDataGridView.Rows[i + 1].DefaultCellStyle.BackColor = TableColors.MemberRow;
}
}
else if (rowStatus == RowParser.RowAttribute.MemberRow)
{
if (i > 0)
{
//Check the previous row.
rowStatus = parser.GetRowAttribute(masterDataGridView.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 == RowParser.RowAttribute.MemberRow && (i - 1) == 0)
{
//Clear the previous row of its attributes.
if ((bool)masterDataGridView.Rows[i - 1].Cells[masterMemberColumn].EditedFormattedValue)
{
//And mark it as dirty if those attributes have been set for whatever reason.
inventoryDataGridView.Rows[i - 1].Cells[isDirtyColumn].Value = true;
inventoryDataGridView.Rows[i - 1].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
inventoryDataGridView.Rows[i - 1].Cells[isHeaderColumn].Value = false;
inventoryDataGridView.Rows[i - 1].Cells[isMemberColumn].Value = false;
inventoryDataGridView.Rows[i - 1].DefaultCellStyle.BackColor = default(Color);
//Check for changes in the current row.
if ((bool)masterDataGridView.Rows[i].Cells[masterMemberColumn].EditedFormattedValue)
{
inventoryDataGridView.Rows[i].Cells[isDirtyColumn].Value = true;
inventoryDataGridView.Rows[i].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
//Clear the current row of its attributes.
inventoryDataGridView.Rows[i].Cells[isHeaderColumn].Value = false;
inventoryDataGridView.Rows[i].Cells[isMemberColumn].Value = false;
inventoryDataGridView.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 == RowParser.RowAttribute.MemberRow && (bool)masterDataGridView.Rows[i - 1].Cells[masterMemberColumn].EditedFormattedValue)
{
//Check for changes in the current row.
if (!(bool)masterDataGridView.Rows[i].Cells[masterMemberColumn].EditedFormattedValue)
{
inventoryDataGridView.Rows[i].Cells[isDirtyColumn].Value = true;
inventoryDataGridView.Rows[i].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
//Set the current row as a member row.
inventoryDataGridView.Rows[i].Cells[isHeaderColumn].Value = false;
inventoryDataGridView.Rows[i].Cells[isMemberColumn].Value = true;
inventoryDataGridView.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 == RowParser.RowAttribute.MemberRow || rowStatus == RowParser.RowAttribute.AdSpecialRow)
{
//Check for changes in the current row.
if ((bool)masterDataGridView.Rows[i].Cells[masterMemberColumn].EditedFormattedValue)
{
inventoryDataGridView.Rows[i].Cells[isDirtyColumn].Value = true;
inventoryDataGridView.Rows[i].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
//Clear the current row of its attributes.
inventoryDataGridView.Rows[i].Cells[isHeaderColumn].Value = false;
inventoryDataGridView.Rows[i].Cells[isMemberColumn].Value = false;
inventoryDataGridView.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 == RowParser.RowAttribute.HeaderRow && !(bool)masterDataGridView.Rows[i - 1].Cells[masterHeaderColumn].EditedFormattedValue)
{
//Set the previous row as a header row.
if (!(bool)masterDataGridView.Rows[i - 1].Cells[masterMemberColumn].EditedFormattedValue)
{
inventoryDataGridView.Rows[i - 1].Cells[isDirtyColumn].Value = true;
inventoryDataGridView.Rows[i - 1].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
inventoryDataGridView.Rows[i - 1].Cells[isHeaderColumn].Value = true;
inventoryDataGridView.Rows[i - 1].Cells[isMemberColumn].Value = false;
inventoryDataGridView.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.
inventoryDataGridView.Rows[i - 1].Cells[isDirtyColumn].Value = true;
inventoryDataGridView.Rows[i - 1].HeaderCell.Style.BackColor = TableColors.PendingEdit;
//Check for changes in the current row.
if (!(bool)masterDataGridView.Rows[i].Cells[masterMemberColumn].EditedFormattedValue)
{
inventoryDataGridView.Rows[i].Cells[isDirtyColumn].Value = true;
inventoryDataGridView.Rows[i].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
//Set the current row as a member row.
inventoryDataGridView.Rows[i].Cells[isHeaderColumn].Value = false;
inventoryDataGridView.Rows[i].Cells[isMemberColumn].Value = true;
inventoryDataGridView.Rows[i].DefaultCellStyle.BackColor = TableColors.MemberRow;
}
else if (rowStatus == RowParser.RowAttribute.HeaderRow)
{
//Check for changes in the current row.
if (!(bool)masterDataGridView.Rows[i].Cells[masterMemberColumn].EditedFormattedValue)
{
inventoryDataGridView.Rows[i].Cells[isDirtyColumn].Value = true;
inventoryDataGridView.Rows[i].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
//Set the current row as a member row.
inventoryDataGridView.Rows[i].Cells[isHeaderColumn].Value = false;
inventoryDataGridView.Rows[i].Cells[isMemberColumn].Value = true;
inventoryDataGridView.Rows[i].DefaultCellStyle.BackColor = TableColors.MemberRow;
}
//IF the previous row is incomplete, then call the stable PaintRowGroups function.
else if (rowStatus == RowParser.RowAttribute.IncompleteRow)
{
//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.
else
{
//Clear the current row of its attributes.
if (!(bool)masterDataGridView.Rows[0].Cells[masterMemberColumn].EditedFormattedValue)
{
//If the row thinks that it's a member row then set it to dirty so the changes can be shown.
inventoryDataGridView.Rows[0].Cells[isDirtyColumn].Value = true;
inventoryDataGridView.Rows[0].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
inventoryDataGridView.Rows[0].Cells[isHeaderColumn].Value = false;
inventoryDataGridView.Rows[0].Cells[isMemberColumn].Value = false;
inventoryDataGridView.Rows[0].DefaultCellStyle.BackColor = default(Color);
}
}
else if (rowStatus == RowParser.RowAttribute.AdSpecialRow)
{
if (i == 0) return;
inventoryDataGridView.Rows[startingIndex].DefaultCellStyle.BackColor = TableColors.AdSpecial;
//Get the previous row's attribute.
rowStatus = parser.GetRowAttribute(masterDataGridView.Rows[i - 1]);
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)masterDataGridView.Rows[i - 1].Cells[masterHeaderColumn].EditedFormattedValue)
{
inventoryDataGridView.Rows[i - 1].Cells[isDirtyColumn].Value = true;
inventoryDataGridView.Rows[i - 1].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
//Clear its color coding.
inventoryDataGridView.Rows[i - 1].Cells[isHeaderColumn].Value = false;
inventoryDataGridView.Rows[i - 1].Cells[isMemberColumn].Value = false;
inventoryDataGridView.Rows[i - 1].DefaultCellStyle.BackColor = default(Color);
}
//Next get the status of the next row.
rowStatus = parser.GetRowAttribute(masterDataGridView.Rows[i + 1]);
if (rowStatus == RowParser.RowAttribute.MemberRow)
{
//Check to see if the next row thinks it is a member row.
if (!(bool)masterDataGridView.Rows[i + 1].Cells[masterMemberColumn].EditedFormattedValue)
{
inventoryDataGridView.Rows[i + 1].Cells[isDirtyColumn].Value = true;
inventoryDataGridView.Rows[i + 1].HeaderCell.Style.BackColor = TableColors.PendingEdit;
}
//Clear its color coding.
inventoryDataGridView.Rows[i + 1].Cells[isMemberColumn].Value = false;
inventoryDataGridView.Rows[i + 1].Cells[isHeaderColumn].Value = false;
inventoryDataGridView.Rows[i + 1].DefaultCellStyle.BackColor = default(Color);
}
}
}
}
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 InvoiceTableColumns
{
Id = 0,
InvoiceDate = 1,
Supplier = 2,
InvoiceNumber = 3,
InvoiceNetAmountAtCost = 4,
InvoiceNote = 5,
IsDirty = 6
}
}
}