From ad3fa573b853015699996f6975ebb9bc02465d4f Mon Sep 17 00:00:00 2001 From: Garritt McCune Date: Fri, 11 Nov 2016 17:09:43 -0600 Subject: [PATCH] Fixed a bug in the Inventory and Actual Sales tables where the user could leave a row without an ad item. Fixed data type mismatch with the database insertion methods. --- AdvertsingProfitControl/APCDatabase.accdb | Bin 2932736 -> 2932736 bytes .../AdvertisingProfitControlTableHelper.cs | 4 +- AdvertsingProfitControl/DatabaseWriter.cs | 40 ++--- AdvertsingProfitControl/NewAddRecord.cs | 146 ++++++++++++------ .../bin/Debug/APCDatabase.accdb | Bin 2932736 -> 2932736 bytes .../Debug/AdvertsingProfitControl.application | 2 +- .../AdvertsingProfitControl.exe.manifest | 6 +- ...AdvertsingProfitControl.vshost.application | 2 +- ...dvertsingProfitControl.vshost.exe.manifest | 6 +- .../Debug/AdvertsingProfitControl.application | 2 +- .../AdvertsingProfitControl.exe.manifest | 6 +- 11 files changed, 131 insertions(+), 83 deletions(-) diff --git a/AdvertsingProfitControl/APCDatabase.accdb b/AdvertsingProfitControl/APCDatabase.accdb index cc80a4fad9f234ce6c841b12e08e778728ccf6cd..775633edbdbf35199b1a0e66ff750a686cf38692 100644 GIT binary patch delta 1653 zcmZo@*vtsR8<_YwU1fJNF)=bSGHw>+d(SvofsbvIzx7_8T_{GEKM7XHlQ- zaGr^8^M(BR?2{EADKH7jZ=P6gzMR!sly}Cq>1X8_C7HjRW}1F4pF^pgTb{9n!JpcFw7#aI`e8L=k=4#4uGcwHM*|=~L&-4TPI60>8*`qBpefv@!f$i6N zbaa@vGkxIE7Q|uxb|wMdfBgK6jQI=*!|Eq4EWxV&67zJ9eH;c%YRuCES93{C517Yc zJl#c#OM96Cufw(i9y3&L*!gNXZNIrjM;)iO23~<}4|tdamNPYQ3h+TZblMQFhqRct zJzyu*B7R23GO!0BhPO>zSdHRAf-arDX&;9XlMDNFg*C|jhR4D@YrKxuVdjO{4^c-o z`{DkgvboC|gaz6Z_}Ucsw zf|Jnk3&)z-ERMZBy69*)E8o$hM{1^jlv8rtxZxHvGb_WQ=?cdc3?%PC++f9^#~{Zb z#lXhE#K6iR&&se6B7K{I;k2O~H-_{Au(Z@U1_n^J#E_oPI6ZMCr(t`~QHAY2M-``7 zO;^~!$jQvZz%o@wDRp|~1rA9w28Mr(T#;-H3|tIM49pCiEDQ{=u!l-;GcYr-AW1xX z_K$Jv1En6u>6IIqcvKqx|2O#mp8UM`T{3TSvzJ$CWb1g zWCL81lYtSem*M|^=Kud0|NrLzlTbkxMJ9%AU_H|hOk~z*muFULmuFUPmuFUKmuFUO zmuFUMmuFUQmj}yfw#zeXZI@@(er&^2#m@}3gMq<@VY&qYp9u>~^sE5mky4LZjdrz;4s YDs8{EQD+h3bb|tEmhE#k>!k1i02xRC$^ZZW delta 1322 zcmZo@*vtsR8<_YwKg;Z7Vq#=uWZW#s_nvXG0w3EZf&KhU|Nc)tC~w2~Y4SgLSKiA^ z3~+FHbAZBUex}PzlVbzqH>Vh^vYEJ8YPv%{EAM2}TrozTjSKymrrYPUs84q|&&0R+ zLjHXA$qJ7Y83i{_EH_`y%K2r(t@YE-$}vhZKRL}b{a!wYQaiUiV>`Dz({^ro=8YE^ zh1>VOXKvs7o@M*q_pIRpjPtjOvdPF#R{9`4-QJ&tcY35en;0Wwdx1P#dx1Rr_5yj1 z2@j?vaI)}dL*2;8u=o6SMFpm{{F>|xr3?%VDGZqmMGQg=3=ANDbNChhP#%kO}3}4ZpEUPM7=0D!{72$lzc-{n>gRO-8VSevpFV=?~bM zmHA*++_??1YWi6wX5F>|uC@a1Wd%F|+X^H#c%~Ob@hNSus^Mv4o_=Azu)_4L)4~GF zF7OCUE8wu$ZZU!P6#sUn4?Nm}8#gGiO*bfzX4%f)!M=lKyLAoEQDiLwyaL+}u=lWS zZG9_wCaO$dT+cUkyM+Po3HxaVycVoC85kIEZVz0}ww`0-1`+mU z4ZH%|6ogcjH*Sb$MwoDmb>jv%RtSH3h_sX}*tOFQz4=s_HRnf7-&n=>bK(kt?H{W7 zrZ7zp&*$}-exZ&pcG?A5OBMzO#(PK>2=E9jTOa`T73)I=2F8b|a%~EHZ3_I`6a<(I zcm()B5etg`Net5k1Xw+$hXn}S*=`jmP{KQL1IP4raRRy$M;I6w7#SG&85z`)w_RL# z<%t7?p5A+xOJ=&+T`v9UcJTrd95Mz49*-_QahQJbDz6yd$>J7%1_p*xObj~hB0B9& z@dE8l@q+D5@j~rQ@xtv*@gnU_@uKZb@nY>w@#5`G@e=J#@sjOL@lx$g@zU*0@iOgA z@v`kr@pA1=@$%c7;uRVaxPP-GfE>%fz@R>z_ke;EFZ+dK&1@FO-X2|aG@Nzg!rv?` ztPJxRrzfuDG;HrVs<6H1sNxhWo*z59C3Z71F!*sXFiq7_N|pX7`j3$-k`0uu85x)u zI9V7Nm>5AO3kXeLp^Axt!MsaicLQ7xCrA%O zT^v|l0ZhNrf1dxlSrnNVwt+30eqbWAM!P(-QoB5}a=SdUO1nI>YP&qMTDv^6db>PW zPP1K}S!=sIv-V>fo=N=7U`rSn48T#FxZQpMYbwvi4gE}-EDWGH{r``j;Y2YH0~Z4$ z13Px1>4uWbiOehvN7_I5Yj6MHuOpPe^O4gh%+UvA_EU!K0vmKrFmC_0QD+h3#0?6N LOfzS*P6`hIJi@yf diff --git a/AdvertsingProfitControl/AdvertisingProfitControlTableHelper.cs b/AdvertsingProfitControl/AdvertisingProfitControlTableHelper.cs index 3173e90..39fda49 100644 --- a/AdvertsingProfitControl/AdvertisingProfitControlTableHelper.cs +++ b/AdvertsingProfitControl/AdvertisingProfitControlTableHelper.cs @@ -262,7 +262,7 @@ namespace AdvertsingProfitControl TotalProfitReturn = 7, IsHeaderRow = 8, IsMemberRow = 9, - IsDirty = 10, + IsDirty = 10 } public enum InventoryTableColumns @@ -275,7 +275,7 @@ namespace AdvertsingProfitControl EndingInventory = 5, IsHeaderRow = 6, IsMemberRow = 7, - IsDirty = 8, + IsDirty = 8 } public enum InvoiceTableColumns diff --git a/AdvertsingProfitControl/DatabaseWriter.cs b/AdvertsingProfitControl/DatabaseWriter.cs index 37d84d9..690b24c 100644 --- a/AdvertsingProfitControl/DatabaseWriter.cs +++ b/AdvertsingProfitControl/DatabaseWriter.cs @@ -55,7 +55,7 @@ namespace AdvertsingProfitControl oleDbCommand.Parameters.AddWithValue("RowAttribute", int.Parse(salesTable.Rows[i][7].ToString())); oleDbCommand.Parameters.AddWithValue("adSpecialID", int.Parse(salesTable.Rows[i][8].ToString())); oleDbCommand.Parameters.AddWithValue("RowPosition", int.Parse(salesTable.Rows[i][9].ToString())); - oleDbCommand.Parameters.AddWithValue("dateID", salesTable.Rows[i][10]); + oleDbCommand.Parameters.AddWithValue("dateID", int.Parse(salesTable.Rows[i][10].ToString())); oleDbCommand.ExecuteNonQuery(); oleDbCommand.Parameters.Clear(); //Row index is only used to keep track of what row failed to update. @@ -150,15 +150,15 @@ namespace AdvertsingProfitControl //11:FK_DateID oleDbCommand.Parameters.AddWithValue("Sold", salesTable.Rows[i][1]); oleDbCommand.Parameters.AddWithValue("SalesPrice", salesTable.Rows[i][2]); - oleDbCommand.Parameters.AddWithValue("TotalSales", salesTable.Rows[i][3]); - oleDbCommand.Parameters.AddWithValue("Cost", salesTable.Rows[i][4]); - oleDbCommand.Parameters.AddWithValue("ProfitReturn", salesTable.Rows[i][5]); - oleDbCommand.Parameters.AddWithValue("TotalProfitReturn", salesTable.Rows[i][6]); - oleDbCommand.Parameters.AddWithValue("FK_AdItemID", salesTable.Rows[i][7]); - oleDbCommand.Parameters.AddWithValue("RowAttribute", salesTable.Rows[i][8]); - oleDbCommand.Parameters.AddWithValue("adSpecialID", salesTable.Rows[i][9]); - oleDbCommand.Parameters.AddWithValue("RowPosition", salesTable.Rows[i][10]); - oleDbCommand.Parameters.AddWithValue("ID", salesTable.Rows[i][0]); + oleDbCommand.Parameters.AddWithValue("TotalSales", int.Parse(salesTable.Rows[i][3].ToString())); + oleDbCommand.Parameters.AddWithValue("Cost", int.Parse(salesTable.Rows[i][4].ToString())); + oleDbCommand.Parameters.AddWithValue("ProfitReturn", int.Parse(salesTable.Rows[i][5].ToString())); + oleDbCommand.Parameters.AddWithValue("TotalProfitReturn", int.Parse(salesTable.Rows[i][6].ToString())); + oleDbCommand.Parameters.AddWithValue("FK_AdItemID", int.Parse(salesTable.Rows[i][7].ToString())); + oleDbCommand.Parameters.AddWithValue("RowAttribute", int.Parse(salesTable.Rows[i][8].ToString())); + oleDbCommand.Parameters.AddWithValue("adSpecialID", int.Parse(salesTable.Rows[i][9].ToString())); + oleDbCommand.Parameters.AddWithValue("RowPosition", int.Parse(salesTable.Rows[i][10].ToString())); + oleDbCommand.Parameters.AddWithValue("ID", int.Parse(salesTable.Rows[i][0].ToString())); oleDbCommand.ExecuteNonQuery(); oleDbCommand.Parameters.Clear(); //Row index is only used to keep track of what row failed to update. @@ -253,11 +253,11 @@ namespace AdvertsingProfitControl oleDbCommand.Parameters.AddWithValue("Received", table.Rows[i][1]); oleDbCommand.Parameters.AddWithValue("TotalInventory", table.Rows[i][2]); oleDbCommand.Parameters.AddWithValue("EndingInventory", table.Rows[i][3]); - oleDbCommand.Parameters.AddWithValue("AdItemID", table.Rows[i][4]); - oleDbCommand.Parameters.AddWithValue("RowAttribute", table.Rows[i][5]); - oleDbCommand.Parameters.AddWithValue("FK_AdSpecialGroup", table.Rows[i][6]); - oleDbCommand.Parameters.AddWithValue("RowPosition", table.Rows[i][7]); - oleDbCommand.Parameters.AddWithValue("DateID", table.Rows[i][8]); + oleDbCommand.Parameters.AddWithValue("AdItemID", int.Parse(table.Rows[i][4].ToString())); + oleDbCommand.Parameters.AddWithValue("RowAttribute", int.Parse(table.Rows[i][5].ToString())); + oleDbCommand.Parameters.AddWithValue("FK_AdSpecialGroup", int.Parse(table.Rows[i][6].ToString())); + oleDbCommand.Parameters.AddWithValue("RowPosition", int.Parse(table.Rows[i][7].ToString())); + oleDbCommand.Parameters.AddWithValue("DateID", int.Parse(table.Rows[i][8].ToString())); oleDbCommand.ExecuteNonQuery(); oleDbCommand.Parameters.Clear(); //Row index is only used to keep track of what row failed to update. @@ -345,11 +345,11 @@ namespace AdvertsingProfitControl oleDbCommand.Parameters.AddWithValue("Received", table.Rows[i][2]); oleDbCommand.Parameters.AddWithValue("TotalInventory", table.Rows[i][3]); oleDbCommand.Parameters.AddWithValue("EndingInventory", table.Rows[i][4]); - oleDbCommand.Parameters.AddWithValue("AdItemID", table.Rows[i][5]); - oleDbCommand.Parameters.AddWithValue("RowAttribute", table.Rows[i][6]); - oleDbCommand.Parameters.AddWithValue("FK_AdSpecialGroup", table.Rows[i][7]); - oleDbCommand.Parameters.AddWithValue("RowPosition", table.Rows[i][8]); - oleDbCommand.Parameters.AddWithValue("ID", table.Rows[i][0]); + oleDbCommand.Parameters.AddWithValue("AdItemID", int.Parse(table.Rows[i][5].ToString())); + oleDbCommand.Parameters.AddWithValue("RowAttribute", int.Parse(table.Rows[i][6].ToString())); + oleDbCommand.Parameters.AddWithValue("FK_AdSpecialGroup", int.Parse(table.Rows[i][7].ToString())); + oleDbCommand.Parameters.AddWithValue("RowPosition", int.Parse(table.Rows[i][8].ToString())); + oleDbCommand.Parameters.AddWithValue("ID", int.Parse(table.Rows[i][0].ToString())); oleDbCommand.ExecuteNonQuery(); oleDbCommand.Parameters.Clear(); //Row index is only used to keep track of what row failed to update. diff --git a/AdvertsingProfitControl/NewAddRecord.cs b/AdvertsingProfitControl/NewAddRecord.cs index 2feaf0a..04130a1 100644 --- a/AdvertsingProfitControl/NewAddRecord.cs +++ b/AdvertsingProfitControl/NewAddRecord.cs @@ -743,6 +743,7 @@ namespace AdvertsingProfitControl if (Regex.Replace(projectionsDataGridView.Rows[e.RowIndex].Cells[adItemIndex].EditedFormattedValue.ToString(), @"\s+", "") == "") { MessageBox.Show(@"An ad item is required.", @"No Ad Item Specified"); + projectionsDataGridView.Rows[e.RowIndex].Cells[adItemIndex].Selected = true; e.Cancel = true; } //Check to see if the user left a row that already exists and doesn't require being copied over. @@ -809,16 +810,11 @@ namespace AdvertsingProfitControl rowContents[i] = projectionsDataGridView.Rows[e.RowIndex].Cells[i].EditedFormattedValue.ToString(); } break; - case (int)SalesTableColumns.IsHeaderRow: - rowContents[i] = projectionsDataGridView.Rows[e.RowIndex].Cells[(int)SalesTableColumns.IsHeaderRow].Value; - break; - case (int)SalesTableColumns.IsMemberRow: - rowContents[i] = projectionsDataGridView.Rows[e.RowIndex].Cells[(int)SalesTableColumns.IsMemberRow].Value; - break; case (int)SalesTableColumns.IsDirty: rowContents[i] = true; break; default: + if(i >= (int)SalesTableColumns.IsHeaderRow) continue; rowContents[i] = ""; break; } @@ -839,12 +835,6 @@ namespace AdvertsingProfitControl inventoryNewRow[(int)InventoryTableColumns.AdItem] = projectionsDataGridView.Rows[e.RowIndex].Cells[i].EditedFormattedValue.ToString(); break; - case (int)SalesTableColumns.IsHeaderRow: - rowContents[(int)InventoryTableColumns.IsHeaderRow] = projectionsDataGridView.Rows[e.RowIndex].Cells[i].Value; - break; - case (int)SalesTableColumns.IsMemberRow: - rowContents[(int)InventoryTableColumns.IsMemberRow] = projectionsDataGridView.Rows[e.RowIndex].Cells[i].Value; - break; case (int)SalesTableColumns.IsDirty: inventoryNewRow[(int)InventoryTableColumns.IsDirty] = true; break; @@ -1072,23 +1062,24 @@ namespace AdvertsingProfitControl private void ValidateInventoryRow(object sender, DataGridViewCellCancelEventArgs e) { //Grab the index of the ad item, assuming the Sales tables and the Inventory table stay in the same position. - const int adItemIndex = (int)SalesTableColumns.AdItem; + const int adItemIndex = (int)InventoryTableColumns.AdItem; //Do not even attempt anything since this is a new row and nothing to worry about. if (inventoryDataGridView.Rows[e.RowIndex].IsNewRow) { return; } + //Clear all whitespace and check for a null value in the ad item column. + if (Regex.Replace(inventoryDataGridView.Rows[e.RowIndex].Cells[adItemIndex].EditedFormattedValue.ToString(), @"\s+", "") == "") + { + MessageBox.Show(@"An ad item is required.", @"No Ad Item Specified"); + inventoryDataGridView.Rows[e.RowIndex].Cells[adItemIndex].Selected = true; + e.Cancel = true; + } //Check to see if the user left a row that already exists and doesn't require being copied over. if (inventoryDataGridView.Rows[e.RowIndex].Cells[adItemIndex].EditedFormattedValue.ToString() == actualSalesDataGridView.Rows[e.RowIndex].Cells[adItemIndex].EditedFormattedValue.ToString()) { return; } - //Clear all whitespace and check for a null value in the ad item column. - if (Regex.Replace(projectionsDataGridView.Rows[e.RowIndex].Cells[adItemIndex].EditedFormattedValue.ToString(), @"\s+", "") == "") - { - MessageBox.Show(@"An ad item is required.", @"No Ad Item Specified"); - e.Cancel = true; - } //Now check to make sure there is an ad item present, otherwise throw an error and block the user from leaving the current row. if (inventoryDataGridView.Rows[e.RowIndex].Cells[adItemIndex].EditedFormattedValue.ToString() != "") { @@ -1124,16 +1115,14 @@ namespace AdvertsingProfitControl case (int)SalesTableColumns.AdItem: rowContents[i] = inventoryDataGridView.Rows[e.RowIndex].Cells[(int)InventoryTableColumns.AdItem].EditedFormattedValue.ToString(); break; - case (int)SalesTableColumns.IsHeaderRow: - rowContents[i] = inventoryDataGridView.Rows[e.RowIndex].Cells[(int)InventoryTableColumns.IsHeaderRow].Value; - break; - case (int)SalesTableColumns.IsMemberRow: - rowContents[i] = projectionsDataGridView.Rows[e.RowIndex].Cells[(int)InventoryTableColumns.IsMemberRow].Value; - break; case (int)SalesTableColumns.IsDirty: rowContents[i] = true; break; default: + if (i >= (int) InventoryTableColumns.IsHeaderRow) + { + continue; + } rowContents[i] = ""; break; } @@ -1144,7 +1133,7 @@ namespace AdvertsingProfitControl else { MessageBox.Show(@"An Ad Item is required.", @"Invalid Ad Item"); - projectionsDataGridView.Rows[e.RowIndex].Cells[adItemIndex].Selected = true; + inventoryDataGridView.Rows[e.RowIndex].Cells[adItemIndex].Selected = true; e.Cancel = true; } } @@ -1231,17 +1220,18 @@ namespace AdvertsingProfitControl { return; } - //Check to see if the user left a row that already exists and doesn't require being copied over. - if (actualSalesDataGridView.Rows[e.RowIndex].Cells[adItemIndex].EditedFormattedValue.ToString() == projectionsDataGridView.Rows[e.RowIndex].Cells[adItemIndex].EditedFormattedValue.ToString()) - { - return; - } //Clear all whitespace and check for a null value in the ad item column. if (Regex.Replace(actualSalesDataGridView.Rows[e.RowIndex].Cells[adItemIndex].EditedFormattedValue.ToString(), @"\s+", "") == "") { MessageBox.Show(@"An ad item is required.", @"No Ad Item Specified"); + actualSalesDataGridView.Rows[e.RowIndex].Cells[adItemIndex].Selected = true; e.Cancel = true; } + //Check to see if the user left a row that already exists and doesn't require being copied over. + if (actualSalesDataGridView.Rows[e.RowIndex].Cells[adItemIndex].EditedFormattedValue.ToString() == projectionsDataGridView.Rows[e.RowIndex].Cells[adItemIndex].EditedFormattedValue.ToString()) + { + return; + } //Now check to make sure there is an ad item present, otherwise throw an error and block the user from leaving the current row. if (actualSalesDataGridView.Rows[e.RowIndex].Cells[adItemIndex].EditedFormattedValue.ToString() != "") { @@ -1283,16 +1273,11 @@ namespace AdvertsingProfitControl case (int)SalesTableColumns.Cost: rowContents[i] = actualSalesDataGridView.Rows[e.RowIndex].Cells[i].EditedFormattedValue.ToString(); break; - case (int)SalesTableColumns.IsHeaderRow: - rowContents[i] = actualSalesDataGridView.Rows[e.RowIndex].Cells[(int) SalesTableColumns.IsHeaderRow].Value; - break; - case (int)SalesTableColumns.IsMemberRow: - rowContents[i] = actualSalesDataGridView.Rows[e.RowIndex].Cells[(int)SalesTableColumns.IsMemberRow].Value; - break; case (int)SalesTableColumns.IsDirty: rowContents[i] = true; break; default: + if (i >= (int)SalesTableColumns.IsHeaderRow) continue; rowContents[i] = ""; break; } @@ -1310,12 +1295,6 @@ namespace AdvertsingProfitControl inventoryNewRow[(int)InventoryTableColumns.AdItem] = actualSalesDataGridView.Rows[e.RowIndex].Cells[i].EditedFormattedValue.ToString(); break; - case (int)SalesTableColumns.IsHeaderRow: - rowContents[(int)InventoryTableColumns.IsHeaderRow] = actualSalesDataGridView.Rows[e.RowIndex].Cells[(int)SalesTableColumns.IsHeaderRow].Value; - break; - case (int)SalesTableColumns.IsMemberRow: - rowContents[(int)InventoryTableColumns.IsMemberRow] = actualSalesDataGridView.Rows[e.RowIndex].Cells[(int)SalesTableColumns.IsMemberRow].Value; - break; case (int)SalesTableColumns.IsDirty: inventoryNewRow[(int)InventoryTableColumns.IsDirty] = true; break; @@ -1332,7 +1311,7 @@ namespace AdvertsingProfitControl else { MessageBox.Show(@"An Ad Item is required.", @"Invalid Ad Item"); - projectionsDataGridView.Rows[e.RowIndex].Cells[adItemIndex].Selected = true; + actualSalesDataGridView.Rows[e.RowIndex].Cells[adItemIndex].Selected = true; e.Cancel = true; } } @@ -1715,7 +1694,21 @@ namespace AdvertsingProfitControl DataTable updateTable; informationLabel.Text = @"Compressing data tables..."; var operationStatus = ConstructCleanedSalesTable("Projections", dateId, out trimmedTable, out updateTable); - ProcessTrimmingStatusResult(projectionsDataGridView, "Projections", operationStatus, trimmedTable, updateTable); + if (operationStatus == TrimmingOperationResult.FailedToTrim) + { + informationLabel.Text = @"Failed to trim the Projections table."; + return; + } + ProcessTrimmingStatusResult(projectionsDataGridView, "Projections", operationStatus, trimmedTable, updateTable); + trimmedTable.Rows.Clear(); + updateTable.Rows.Clear(); + operationStatus = ConstructCleanedInventoryTable(dateId, out trimmedTable, out updateTable); + if (operationStatus == TrimmingOperationResult.FailedToTrim) + { + informationLabel.Text = @"Failed to trim the Inventory table."; + return; + } + ProcessTrimmingStatusForInventory(operationStatus, trimmedTable, updateTable); //Create the transaction scope. //By default the TransactionScopeOption is "Required", so if an ambient transaction does not //exist then the new transaction that is made (in the first method) becomes the root transaction. @@ -2237,11 +2230,66 @@ namespace AdvertsingProfitControl } informationLabel.Text += Environment.NewLine + @"All operations completed successfully."; break; - case TrimmingOperationResult.FailedToTrim: - errorLabel.Text = @"Failed to trim " + tableName + @"."; - informationLabel.Text = ""; - return; } + dataGridView.RefreshEdit(); + } + + private void ProcessTrimmingStatusForInventory(TrimmingOperationResult operationStatus, DataTable trimmedTable, DataTable updateTable) + { + //Create the database interaction objects. + var dbT = new DatabaseTracker(); + var dbW = new DatabaseWriter(dbT.DatabaseConnectionString); + DbWriterStatus dbWriterStatus; + switch (operationStatus) + { + case TrimmingOperationResult.NoChangesRequired: + informationLabel.Text += Environment.NewLine + @"No changes for the Inventory table detected."; + break; + case TrimmingOperationResult.CreatedNewInsertionTable: + informationLabel.Text += Environment.NewLine + @"Inserting new changes to the Inventory table."; + dbWriterStatus = dbW.InsertIntoInventoryTable(trimmedTable, dbT.DatabaseConnectionString); + //Spin through the collection and update the affected rows. + foreach (var rowIndex in dbWriterStatus.GetRowCollection()) + { + inventoryDataGridView.Rows[rowIndex.Key - 1].Cells[(int)InventoryTableColumns.Id].Value = rowIndex.Value; + inventoryDataGridView.Rows[rowIndex.Key - 1].Cells[(int)InventoryTableColumns.IsDirty].Value = false; + } + informationLabel.Text += Environment.NewLine + @"Inventory table successfully added to the database."; + break; + case TrimmingOperationResult.CreatedUpdateTable: + informationLabel.Text += Environment.NewLine + @"Updating changes made to the Inventory table."; + dbWriterStatus = dbW.UpdateInventoryTable(updateTable, dbT.DatabaseConnectionString); + //Spin through the collection and update the affected rows. + foreach (var rowIndex in dbWriterStatus.GetRowCollection()) + { + //Only reset the IsDirty value to false since the updates when through. + inventoryDataGridView.Rows[rowIndex.Key - 1].Cells[(int)InventoryTableColumns.IsDirty].Value = false; + } + informationLabel.Text += Environment.NewLine + @"Inventory table successfully updated."; + break; + case TrimmingOperationResult.CreatedNewInsertionAndUpdateTables: + //Insert the new values... + informationLabel.Text += Environment.NewLine + @"Inserting new changes to the Inventory table."; + dbWriterStatus = dbW.InsertIntoInventoryTable(trimmedTable, dbT.DatabaseConnectionString); + //Spin through the collection and update the affected rows. + foreach (var rowIndex in dbWriterStatus.GetRowCollection()) + { + inventoryDataGridView.Rows[rowIndex.Key - 1].Cells[(int)InventoryTableColumns.Id].Value = rowIndex.Value; + inventoryDataGridView.Rows[rowIndex.Key - 1].Cells[(int)InventoryTableColumns.IsDirty].Value = false; + } + //... and update the existing values. + informationLabel.Text += Environment.NewLine + @"Updating changes made to the Inventory table."; + dbWriterStatus = dbW.UpdateInventoryTable(updateTable, dbT.DatabaseConnectionString); + //Spin through the collection and update the affected rows. + foreach (var rowIndex in dbWriterStatus.GetRowCollection()) + { + //Only reset the IsDirty value to false since the updates when through. + inventoryDataGridView.Rows[rowIndex.Key - 1].Cells[(int)InventoryTableColumns.IsDirty].Value = false; + } + informationLabel.Text += Environment.NewLine + @"All operations completed successfully."; + break; + } + inventoryDataGridView.RefreshEdit(); } #endregion } diff --git a/AdvertsingProfitControl/bin/Debug/APCDatabase.accdb b/AdvertsingProfitControl/bin/Debug/APCDatabase.accdb index cc80a4fad9f234ce6c841b12e08e778728ccf6cd..775633edbdbf35199b1a0e66ff750a686cf38692 100644 GIT binary patch delta 1653 zcmZo@*vtsR8<_YwU1fJNF)=bSGHw>+d(SvofsbvIzx7_8T_{GEKM7XHlQ- zaGr^8^M(BR?2{EADKH7jZ=P6gzMR!sly}Cq>1X8_C7HjRW}1F4pF^pgTb{9n!JpcFw7#aI`e8L=k=4#4uGcwHM*|=~L&-4TPI60>8*`qBpefv@!f$i6N zbaa@vGkxIE7Q|uxb|wMdfBgK6jQI=*!|Eq4EWxV&67zJ9eH;c%YRuCES93{C517Yc zJl#c#OM96Cufw(i9y3&L*!gNXZNIrjM;)iO23~<}4|tdamNPYQ3h+TZblMQFhqRct zJzyu*B7R23GO!0BhPO>zSdHRAf-arDX&;9XlMDNFg*C|jhR4D@YrKxuVdjO{4^c-o z`{DkgvboC|gaz6Z_}Ucsw zf|Jnk3&)z-ERMZBy69*)E8o$hM{1^jlv8rtxZxHvGb_WQ=?cdc3?%PC++f9^#~{Zb z#lXhE#K6iR&&se6B7K{I;k2O~H-_{Au(Z@U1_n^J#E_oPI6ZMCr(t`~QHAY2M-``7 zO;^~!$jQvZz%o@wDRp|~1rA9w28Mr(T#;-H3|tIM49pCiEDQ{=u!l-;GcYr-AW1xX z_K$Jv1En6u>6IIqcvKqx|2O#mp8UM`T{3TSvzJ$CWb1g zWCL81lYtSem*M|^=Kud0|NrLzlTbkxMJ9%AU_H|hOk~z*muFULmuFUPmuFUKmuFUO zmuFUMmuFUQmj}yfw#zeXZI@@(er&^2#m@}3gMq<@VY&qYp9u>~^sE5mky4LZjdrz;4s YDs8{EQD+h3bb|tEmhE#k>!k1i02xRC$^ZZW delta 1322 zcmZo@*vtsR8<_YwKg;Z7Vq#=uWZW#s_nvXG0w3EZf&KhU|Nc)tC~w2~Y4SgLSKiA^ z3~+FHbAZBUex}PzlVbzqH>Vh^vYEJ8YPv%{EAM2}TrozTjSKymrrYPUs84q|&&0R+ zLjHXA$qJ7Y83i{_EH_`y%K2r(t@YE-$}vhZKRL}b{a!wYQaiUiV>`Dz({^ro=8YE^ zh1>VOXKvs7o@M*q_pIRpjPtjOvdPF#R{9`4-QJ&tcY35en;0Wwdx1P#dx1Rr_5yj1 z2@j?vaI)}dL*2;8u=o6SMFpm{{F>|xr3?%VDGZqmMGQg=3=ANDbNChhP#%kO}3}4ZpEUPM7=0D!{72$lzc-{n>gRO-8VSevpFV=?~bM zmHA*++_??1YWi6wX5F>|uC@a1Wd%F|+X^H#c%~Ob@hNSus^Mv4o_=Azu)_4L)4~GF zF7OCUE8wu$ZZU!P6#sUn4?Nm}8#gGiO*bfzX4%f)!M=lKyLAoEQDiLwyaL+}u=lWS zZG9_wCaO$dT+cUkyM+Po3HxaVycVoC85kIEZVz0}ww`0-1`+mU z4ZH%|6ogcjH*Sb$MwoDmb>jv%RtSH3h_sX}*tOFQz4=s_HRnf7-&n=>bK(kt?H{W7 zrZ7zp&*$}-exZ&pcG?A5OBMzO#(PK>2=E9jTOa`T73)I=2F8b|a%~EHZ3_I`6a<(I zcm()B5etg`Net5k1Xw+$hXn}S*=`jmP{KQL1IP4raRRy$M;I6w7#SG&85z`)w_RL# z<%t7?p5A+xOJ=&+T`v9UcJTrd95Mz49*-_QahQJbDz6yd$>J7%1_p*xObj~hB0B9& z@dE8l@q+D5@j~rQ@xtv*@gnU_@uKZb@nY>w@#5`G@e=J#@sjOL@lx$g@zU*0@iOgA z@v`kr@pA1=@$%c7;uRVaxPP-GfE>%fz@R>z_ke;EFZ+dK&1@FO-X2|aG@Nzg!rv?` ztPJxRrzfuDG;HrVs<6H1sNxhWo*z59C3Z71F!*sXFiq7_N|pX7`j3$-k`0uu85x)u zI9V7Nm>5AO3kXeLp^Axt!MsaicLQ7xCrA%O zT^v|l0ZhNrf1dxlSrnNVwt+30eqbWAM!P(-QoB5}a=SdUO1nI>YP&qMTDv^6db>PW zPP1K}S!=sIv-V>fo=N=7U`rSn48T#FxZQpMYbwvi4gE}-EDWGH{r``j;Y2YH0~Z4$ z13Px1>4uWbiOehvN7_I5Yj6MHuOpPe^O4gh%+UvA_EU!K0vmKrFmC_0QD+h3#0?6N LOfzS*P6`hIJi@yf diff --git a/AdvertsingProfitControl/bin/Debug/AdvertsingProfitControl.application b/AdvertsingProfitControl/bin/Debug/AdvertsingProfitControl.application index 02e1b16..4b10d6d 100644 --- a/AdvertsingProfitControl/bin/Debug/AdvertsingProfitControl.application +++ b/AdvertsingProfitControl/bin/Debug/AdvertsingProfitControl.application @@ -14,7 +14,7 @@ - bbS3aUBt18bmu2EFWZGzfaB2KUwqvo/PJgwQ2X5UpGo= + RAx8Npq1SZBvpDMCKEn72t59h34L92CEq1Pbw42lEP0= diff --git a/AdvertsingProfitControl/bin/Debug/AdvertsingProfitControl.exe.manifest b/AdvertsingProfitControl/bin/Debug/AdvertsingProfitControl.exe.manifest index 087b38f..09d88df 100644 --- a/AdvertsingProfitControl/bin/Debug/AdvertsingProfitControl.exe.manifest +++ b/AdvertsingProfitControl/bin/Debug/AdvertsingProfitControl.exe.manifest @@ -43,14 +43,14 @@ - + - BnL2vMS++iK9YFGaGKfELbajknBgq+TkNZn3K5yRC8w= + WhwHiylhNOOwlXzM3cD3DBPd29Ezk+2JmpmdTTNjSDI= @@ -84,7 +84,7 @@ - nDAH4e73CtUOempeqgnfoRyypkOO191kktA8yxaiU3g= + heLBQIYVVS62s1jc7c8ySCJryJ3KAmItGoYKY1zxkCg= diff --git a/AdvertsingProfitControl/bin/Debug/AdvertsingProfitControl.vshost.application b/AdvertsingProfitControl/bin/Debug/AdvertsingProfitControl.vshost.application index 02e1b16..4b10d6d 100644 --- a/AdvertsingProfitControl/bin/Debug/AdvertsingProfitControl.vshost.application +++ b/AdvertsingProfitControl/bin/Debug/AdvertsingProfitControl.vshost.application @@ -14,7 +14,7 @@ - bbS3aUBt18bmu2EFWZGzfaB2KUwqvo/PJgwQ2X5UpGo= + RAx8Npq1SZBvpDMCKEn72t59h34L92CEq1Pbw42lEP0= diff --git a/AdvertsingProfitControl/bin/Debug/AdvertsingProfitControl.vshost.exe.manifest b/AdvertsingProfitControl/bin/Debug/AdvertsingProfitControl.vshost.exe.manifest index 087b38f..09d88df 100644 --- a/AdvertsingProfitControl/bin/Debug/AdvertsingProfitControl.vshost.exe.manifest +++ b/AdvertsingProfitControl/bin/Debug/AdvertsingProfitControl.vshost.exe.manifest @@ -43,14 +43,14 @@ - + - BnL2vMS++iK9YFGaGKfELbajknBgq+TkNZn3K5yRC8w= + WhwHiylhNOOwlXzM3cD3DBPd29Ezk+2JmpmdTTNjSDI= @@ -84,7 +84,7 @@ - nDAH4e73CtUOempeqgnfoRyypkOO191kktA8yxaiU3g= + heLBQIYVVS62s1jc7c8ySCJryJ3KAmItGoYKY1zxkCg= diff --git a/AdvertsingProfitControl/obj/Debug/AdvertsingProfitControl.application b/AdvertsingProfitControl/obj/Debug/AdvertsingProfitControl.application index 02e1b16..4b10d6d 100644 --- a/AdvertsingProfitControl/obj/Debug/AdvertsingProfitControl.application +++ b/AdvertsingProfitControl/obj/Debug/AdvertsingProfitControl.application @@ -14,7 +14,7 @@ - bbS3aUBt18bmu2EFWZGzfaB2KUwqvo/PJgwQ2X5UpGo= + RAx8Npq1SZBvpDMCKEn72t59h34L92CEq1Pbw42lEP0= diff --git a/AdvertsingProfitControl/obj/Debug/AdvertsingProfitControl.exe.manifest b/AdvertsingProfitControl/obj/Debug/AdvertsingProfitControl.exe.manifest index 087b38f..09d88df 100644 --- a/AdvertsingProfitControl/obj/Debug/AdvertsingProfitControl.exe.manifest +++ b/AdvertsingProfitControl/obj/Debug/AdvertsingProfitControl.exe.manifest @@ -43,14 +43,14 @@ - + - BnL2vMS++iK9YFGaGKfELbajknBgq+TkNZn3K5yRC8w= + WhwHiylhNOOwlXzM3cD3DBPd29Ezk+2JmpmdTTNjSDI= @@ -84,7 +84,7 @@ - nDAH4e73CtUOempeqgnfoRyypkOO191kktA8yxaiU3g= + heLBQIYVVS62s1jc7c8ySCJryJ3KAmItGoYKY1zxkCg=