//********************************************************************************************// private async Task StartViewerAsync(SqlDbViewer sql, int selected) { { Stopwatch sw = new Stopwatch(); sw.Start(); //Also works, but still got white window Console.WriteLine("5 - Calling runloader() "); // sql.Show (); // await Task.Delay (1000); runloader(sql); while (SqlDbViewer.IsviewerLoaded == false) { await Task.Delay(1000); int x = 0; } Console.WriteLine("6 - runloader() call completed"); sw.Stop(); Console.WriteLine($"7 - StartViewer took {sw.ElapsedMilliseconds} Milliseconds\r\n"); alldone = true; // return true; } //{ }
public static void ClearGridviewControlStructure(SqlDbViewer instance, DataGrid Grid) { //No more viewers open, so clear entire gv[] control structure if (instance == null || Flags.DbSelectorOpen.ViewersList.Items.Count == 1) { // Remove ALL Viewers Data - There are no Viewers open apparently ! for (int x = 0; x < MainWindow.gv.MaxViewers; x++) { MainWindow.gv.window [x] = null; MainWindow.gv.CurrentDb [x] = ""; MainWindow.gv.Datagrid [x] = null; MainWindow.gv.ListBoxId [x] = Guid.Empty; MainWindow.gv.SelectedViewerType = -1; MainWindow.gv.ViewerSelectiontype = -1; } MainWindow.gv.ViewerCount = 0; MainWindow.gv.PrettyDetails = ""; } else { //Remove a SINGLE Viewer Windows data from Flags & gv[] DeleteViewerAndFlags( ); Flags.CurrentSqlViewer.UpdateDbSelectorBtns(Flags.CurrentSqlViewer); } }
/// <summary> /// Callback handler for db change notifications sent by another SqlDbViewer /// We have to try to work out whether we have one or more other viewers open /// and update their datagris as relevant /// </summary> /// <param name="sender"></param> //**************************************************************************************************************************************************************// public void DbHasChangedHandler(SqlDbViewer sender, DataGrid Grid, DataChangeArgs args) { if (Grid.Name == "BankGrid") { return; // Nothing to do, it was us that sent the broadcast } // Send it to the correct open viewer window if (Flags.SqlBankViewer != null) { Flags.SqlBankViewer.ReloadBankOnUpdateNotification(sender, Grid, args); } if (Flags.SqlCustViewer != null) { Flags.SqlCustViewer.ReloadCustomerOnUpdateNotification(sender, Grid, args); } if (Flags.SqlDetViewer != null) { Flags.SqlDetViewer.ReloadDetailsOnUpdateNotification(sender, Grid, args); } // See if we need to update EditDb window as well if (Flags.CurrentEditDbViewer != null) { Flags.CurrentEditDbViewer.DbChangedHandler(sender, Grid, args); } return; }
public void SubscribeToChangeEvents () { // subscribe to Data chnaged event fired by SqlDbviewer SqlDbViewer sqlv = new SqlDbViewer ('C'); // assign event handler function sqlv.NotifyOfDataChange += DbHasChanged; }
public void SubscribeToChangeEvents() { // subscribe to Data chngned event fired by SqlDbviewer SqlDbViewer sqlv = new SqlDbViewer('A'); // assign event handler function sqlv.NotifyOfDataChange += DbHasChanged; // CollectionChanged += test; BankAccountObs.CollectionChanged += BankAccountObsChanged; EventHandlers.ShowSubscribersCount(); }
public ViewEditdb(string currentDb, int index, object item, SqlDbViewer sqldb) { CurrentDb = currentDb; SqlDbviewer = sqldb; Item = item; Index = index; // open a new instance of our EditDb Window Editdb = new EditDb(currentDb, 0, item, sqldb); Editdb.Show( ); }
//private void Page5Button_Click(object sender, RoutedEventArgs e) //{ // testwin tw = new testwin(); // tw.Show(); //} private void Page5Button_Click(object sender, RoutedEventArgs e) { if (tw != null) { tw.BringIntoView(); return; } tw = new SqlDbViewer(-1); tw.Show(); }
private void Page5_Click(object sender, RoutedEventArgs e) { // testwin tw = new testwin(); // tw.Show(); if (tw != null) { tw.BringIntoView(); return; } tw = new SqlDbViewer(-1); tw.Show(); }
public static void ClearWindowHandles(EditDb edb, SqlDbViewer sdb) { if (edb != null) { edDb = edb; EditDbSelChange -= new EditDbGridSelectionChanged(edDb.resetEditDbindex); } if (sdb != null) { sqlDb = sdb; SQLVSelChange -= new SQLViewerGridSelectionChanged(sqlDb.resetSQLDBindex); } ShowSubscribersCount(); }
public void OnViewerLoaded(SqlDbViewer sqlv) { //Window is fully loaded, so we can go ahead and load the datagrids etc. OnWindowLoaded(null, null); this.Show(); sqlv.BringIntoView(); // We should start by loading The data - ending up with it in the OC ready for use. CustomerViewModel.LoadCustomersTask(); CustomerViewModel.LoadCustomersIntoList(); CustomerViewModel.LoadCustomerObsCollection(); // CustomerViewModel. //finally we should assign the data to the grid (x.ItemsSource=OC) sqlv.ShowCust_Click(null, null); }
private void runloader(SqlDbViewer NewSqlViewer) { //Thuis actually shows the window fully ? // and is why we are waiting for it to complete //before starting sql loading Stopwatch sw = new Stopwatch(); sw.Start(); Console.WriteLine("8 - runLoader - Showing Sql Window"); NewSqlViewer.Show(); //Task.WaitAll (); Console.WriteLine("9 - runLoader - Completed"); sw.Stop(); Console.WriteLine($"10 - runloader took {sw.ElapsedMilliseconds} Milliseconds "); //return true; }
/// Callback for db change notifications /// </summary> /// <param name="sender"></param> public void DbHasChangedHandler(SqlDbViewer sender, DataGrid Grid, DataChangeArgs args) { if (Flags.SqlBankViewer != null) { Flags.SqlBankViewer.ReloadBankOnUpdateNotification(sender, Grid, args); } if (Flags.SqlCustViewer != null) { Flags.SqlCustViewer.ReloadCustomerOnUpdateNotification(sender, Grid, args); } if (Flags.SqlDetViewer != null) { Flags.SqlDetViewer.ReloadDetailsOnUpdateNotification(sender, Grid, args); } return; }
/// <summary> /// handle maintenance of global flags used to control mutliple /// viewers and EditDb windows, called from Focus() /// </summary> /// <param name="instance"></param> /// <param name="CurrentDb"></param> public static void SetGridviewControlFlags(SqlDbViewer instance, DataGrid Grid) { //Setup global flags - first clear them all as relevant Flags.ActiveSqlViewer = instance; Flags.ActiveSqlViewerStr = instance?.Name; //only do this if we are not closing a windows (Sends Grid=null) if (Grid != null) { if (Grid == Flags.SqlBankGrid) { Flags.CurrentActiveGrid = Grid; Flags.ActiveSqlGrid = Grid; Flags.ActiveSqlGridStr = Grid?.Name; Flags.SqlBankGrid = Grid; Flags.SqlBankGridStr = Grid?.Name; Flags.CurrentSqlViewer = instance; } else if (Grid == Flags.SqlCustGrid) { Flags.CurrentActiveGrid = Grid; Flags.ActiveSqlGrid = Grid; Flags.ActiveSqlGridStr = Grid?.Name; Flags.SqlCustGrid = Grid; Flags.SqlCustGridStr = Grid?.Name; Flags.CurrentSqlViewer = instance; } else if (Grid == Flags.SqlDetGrid) { Flags.CurrentActiveGrid = Grid; Flags.ActiveSqlGrid = Grid; Flags.ActiveSqlGridStr = Grid?.Name; Flags.SqlDetGrid = Grid; Flags.SqlDetGridStr = Grid?.Name; Flags.CurrentSqlViewer = instance; } } else { // we need to clear the details in Gridviewer flag system ClearGridviewControlStructure(instance, Grid); } #if SHOWFLAGS ListGridviewControlFlags(); #endif }
public static void ClearGridviewControlStructure(SqlDbViewer instance, DataGrid Grid) { //No more viewers open, so clear control structure if (instance == null || Flags.DbSelectorOpen.ViewersList.Items.Count == 1) { // Remove ALL Viewers Data - There are no Viewers open apparently ! for (int x = 0; x < MainWindow.gv.MaxViewers; x++) { MainWindow.gv.window[x] = null; MainWindow.gv.CurrentDb[x] = ""; MainWindow.gv.Datagrid[x] = null; MainWindow.gv.ListBoxId[x] = Guid.Empty; MainWindow.gv.SelectedViewerType = -1; MainWindow.gv.ViewerSelectiontype = -1; } MainWindow.gv.ViewerCount = 0; MainWindow.gv.PrettyDetails = ""; } else { //Remove a SINGLE Viewer Windows data SqlDbViewer.DeleteViewerAndFlags(); Flags.CurrentSqlViewer.UpdateDbSelectorBtns(Flags.CurrentSqlViewer); // for (int x = 0; x < MainWindow.gv.MaxViewers; x++) // { // if (MainWindow.gv.ListBoxId[x] == (Guid)instance.Tag) // { // //remove all record of it's very existence // MainWindow.gv.window[x].Close (); // MainWindow.gv.window[x] = null; // MainWindow.gv.Datagrid[x] = null; // MainWindow.gv.CurrentDb[x] = ""; // MainWindow.gv.ListBoxId[x] = Guid.Empty; // MainWindow.gv.SelectedViewerType = -1; // MainWindow.gv.ViewerSelectiontype = -1; // MainWindow.gv.ViewerCount--; // break; // } // } } //Flags.CurrentSqlViewer.UpdateDbSelectorBtns (Flags.CurrentSqlViewer); }
private async Task <string> xStartViewer(SqlDbViewer sql, int selected) { { Stopwatch sw = new Stopwatch(); sw.Start(); //Also works, but still got white window Console.WriteLine("5 - Calling runloader() "); // sql.Show (); runloader(sql); //Task.Run (() => runloader (sql)); Console.WriteLine("6 - runloader() call completed"); sw.Stop(); Console.WriteLine($"7 - StartViewer took {sw.ElapsedMilliseconds} Milliseconds\r\n"); return("All done in StartViewer"); } //{ // Console.WriteLine ("Calling runloader() "); // await runloader (NewSqlViewer); // Console.WriteLine ("runloader() call completed"); //} //return NewSqlViewer; }
private void Page5_Click(object sender, RoutedEventArgs e) { SqlDbViewer tw = new SqlDbViewer(-1); tw.Show(); }
//Remove a SINGLE Viewer Windows data from Flags & gv[] public static bool DeleteViewerAndFlags(int index = -1, string currentDb = "") { int x = index; SqlDbViewer sqlv; // x = GridView[] index if received if (Flags.CurrentSqlViewer == null) { return(false); } Guid tag = ( Guid )Flags.CurrentSqlViewer?.Tag; ListBoxItem lbi = new ListBoxItem( ); if (x == -1) { // Delete all for (int z = 0; z < MainWindow.gv.MaxViewers; z++) { DbSelector.UpdateControlFlags(null, null, MainWindow.gv.PrettyDetails); MainWindow.gv.CurrentDb [z] = ""; MainWindow.gv.ListBoxId [z] = Guid.Empty; MainWindow.gv.Datagrid [z] = null; MainWindow.gv.window [z] = null; } MainWindow.gv.ViewerCount = 0; MainWindow.gv.PrettyDetails = ""; MainWindow.gv.SqlBankViewer = null; MainWindow.gv.SqlCustViewer = null; MainWindow.gv.SqlDetViewer = null; MainWindow.gv.SqlViewerGuid = Guid.Empty; MainWindow.gv.SqlViewerWindow = null; MainWindow.gv.Bankviewer = Guid.Empty; MainWindow.gv.Custviewer = Guid.Empty; MainWindow.gv.Detviewer = Guid.Empty; Flags.ActiveSqlGrid = null; Flags.SqlBankViewer = null; Flags.SqlCustViewer = null; Flags.SqlDetViewer = null; // Flags . CurrentSqlViewer = null; // ALL entries in our GridView structure are now cleared ** totally ** return(true); } else { int GridViewerArrayIndex = 0; // we may have NOT received the index of the viewer in the list // so get the index for the correct Entry if (x == 99) { // got to find it ourselves - iterate thruMainWindow.gv[] array (Range is 0 - 3) for (int i = 0; i < 3; i++) { if (MainWindow.gv.CurrentDb [i] == currentDb) { x = i; break; } } GridViewerArrayIndex = x; // we have got the index in "x" of the viewer in the Mainindow.gv[] array // so get the Tag of that selected Entry vin the ViewersList for (int i = 1; i < 4; i++) { lbi = Flags.DbSelectorOpen.ViewersList.Items [i] as ListBoxItem; if (MainWindow.gv.ListBoxId [GridViewerArrayIndex] == ( Guid )lbi.Tag) { //lbi = Flags . DbSelectorOpen . ViewersList . Items [ i ] as ListBoxItem; Flags.DbSelectorOpen.ViewersList.Items.RemoveAt(i); Flags.DbSelectorOpen.ViewersList.Refresh( ); break; } } } else { // we have the ViewersList index given to us, so use it lbi = Flags.DbSelectorOpen.ViewersList.Items [index] as ListBoxItem; Flags.DbSelectorOpen.ViewersList.Items.RemoveAt(index); Flags.DbSelectorOpen.ViewersList.Refresh( ); // got to findit in thruMainWindow.gv[] array (Range is 0 - 3) for (int i = 0; i < 4; i++) { if (MainWindow.gv.ListBoxId [i] == ( Guid )lbi.Tag) { GridViewerArrayIndex = i; break; } } } sqlv = Flags.CurrentSqlViewer as SqlDbViewer; sqlv.Close( ); // We know which gv[] entry we need to clear, so do it and return MainWindow.gv.CurrentDb [GridViewerArrayIndex] = ""; MainWindow.gv.ListBoxId [GridViewerArrayIndex] = Guid.Empty; MainWindow.gv.Datagrid [GridViewerArrayIndex] = null; MainWindow.gv.window [GridViewerArrayIndex] = null; MainWindow.gv.PrettyDetails = ""; MainWindow.gv.SqlViewerGuid = Guid.Empty; MainWindow.gv.ViewerCount--; // Reposition selected viewer if we have one if (Flags.DbSelectorOpen.ViewersList.Items.Count > GridViewerArrayIndex + 1) { Flags.DbSelectorOpen.ViewersList.SelectedIndex = GridViewerArrayIndex + 1; Flags.DbSelectorOpen.ViewersList.SelectedItem = GridViewerArrayIndex + 1; } else if (Flags.DbSelectorOpen.ViewersList.Items.Count == GridViewerArrayIndex + 1) { Flags.DbSelectorOpen.ViewersList.SelectedIndex = GridViewerArrayIndex - 1; Flags.DbSelectorOpen.ViewersList.SelectedItem = GridViewerArrayIndex - 1; } return(true); } // Unreachable code ... // Now sort out the global gv[] flags for (int y = 1; y < Flags.DbSelectorOpen.ViewersList.Items.Count; y++) { // Get the Tag of eaxch Viewer in the list lbi = Flags.DbSelectorOpen.ViewersList.Items [y] as ListBoxItem; Guid lbtag = ( Guid )lbi.Tag; //See if it matches the one we are closing down if (( Guid )lbtag == ( Guid )tag) { //Yes, we have got a match, so go ahead and remove its gv[] entries first for (int z = 0; z < MainWindow.gv.MaxViewers; z++) { if (MainWindow.gv.ListBoxId [z] == lbtag) { MainWindow.gv.ViewerCount--; MainWindow.gv.CurrentDb [z] = ""; MainWindow.gv.ListBoxId [z] = Guid.Empty; MainWindow.gv.Datagrid [z] = null; MainWindow.gv.window [z] = null; break; } } MainWindow.gv.PrettyDetails = ""; //Finally we can remove this entry from ViewersList lbi = Flags.DbSelectorOpen.ViewersList.Items [y] as ListBoxItem; lbi.Content = ""; Flags.DbSelectorOpen.ViewersList.Items.RemoveAt(y); // Set selectedIndex pointer to current position in list int currentIndex = y - 1; if (y <= 1) // List is basically empty (No viewers in the list) { return(true); } if (Flags.DbSelectorOpen.ViewersList.Items.Count > currentIndex) { Flags.DbSelectorOpen.ViewersList.SelectedIndex = currentIndex; Flags.DbSelectorOpen.ViewersList.SelectedItem = currentIndex; } else if (Flags.DbSelectorOpen.ViewersList.Items.Count == currentIndex) { Flags.DbSelectorOpen.ViewersList.SelectedIndex = currentIndex - 1; Flags.DbSelectorOpen.ViewersList.SelectedItem = currentIndex - 1; } return(true); } } MainWindow.gv.SqlViewerGuid = Guid.Empty; return(false); }
public static void CheckResetAllGridViewData(string KillType, SqlDbViewer caller, bool mode = true) { if (!mode) { // CLEAR DOWN all data entries for the current Viewer // as it is probably chnaging to a different Db SqlDbViewer sqlv = caller; for (int z = 0; z < 3; z++) { if (MainWindow.gv.window [z] == sqlv) { MainWindow.gv.ViewerCount--; MainWindow.gv.ListBoxId [z] = Guid.Empty; MainWindow.gv.Datagrid [z] = null; MainWindow.gv.window [z] = null; if (KillType == "BANKACCOUNT") { MainWindow.gv.Bankviewer = Guid.Empty; MainWindow.gv.SqlBankViewer = null; MainWindow.gv.Bankviewer = Guid.Empty; } else if (KillType == "CUSTOMER") { MainWindow.gv.Custviewer = Guid.Empty; MainWindow.gv.SqlCustViewer = null; MainWindow.gv.Custviewer = Guid.Empty; } else if (KillType == "DETAILS") { MainWindow.gv.Detviewer = Guid.Empty; MainWindow.gv.SqlDetViewer = null; MainWindow.gv.Detviewer = Guid.Empty; } // general flags MainWindow.gv.CurrentDb [z] = ""; MainWindow.gv.PrettyDetails = ""; MainWindow.gv.SqlViewerWindow = null; MainWindow.gv.SqlViewerGuid = Guid.Empty; MainWindow.gv.SqlCurrentEditViewer = null; break; } } } else { // individual set only for (int x = 0; x < 3; x++) { if (MainWindow.gv.CurrentDb [x] == KillType) { MainWindow.gv.ViewerCount--; MainWindow.gv.ListBoxId [x] = Guid.Empty; MainWindow.gv.Datagrid [x] = null; MainWindow.gv.window [x] = null; if (KillType == "BANKACCOUNT") { MainWindow.gv.Bankviewer = Guid.Empty; MainWindow.gv.SqlBankViewer = null; MainWindow.gv.Bankviewer = Guid.Empty; } else if (KillType == "CUSTOMER") { MainWindow.gv.Custviewer = Guid.Empty; MainWindow.gv.SqlCustViewer = null; MainWindow.gv.Custviewer = Guid.Empty; } else if (KillType == "DETAILS") { MainWindow.gv.Detviewer = Guid.Empty; MainWindow.gv.SqlDetViewer = null; MainWindow.gv.Detviewer = Guid.Empty; } // general flags MainWindow.gv.CurrentDb [x] = ""; MainWindow.gv.PrettyDetails = ""; MainWindow.gv.SqlViewerWindow = null; MainWindow.gv.SqlViewerGuid = Guid.Empty; MainWindow.gv.SqlCurrentEditViewer = null; break; } } } }
//*****************************************************************************************// public async Task <bool> UpdateDbRow(string CurrentDb, object Row) { /// /// After a fight, this is now working and updates the relevant RECORD correctly /// int z = 1; if (z < 0) { return(false); } // DataGridRow dg = Row; BankAccountViewModel ss = Row as BankAccountViewModel; CustomerViewModel cs = Row as CustomerViewModel; DetailsViewModel sa = Row as DetailsViewModel; // DataGridRow ss = null; // DataGridRow cs = null; // DataGridRow sa = null; //Sort out the data as this Fn is called with null,null as arguments when a/c is "Closed" //if (Row == null) //{ // if (CurrentDb == "BANKACCOUNT" || CurrentDb == "DETAILS") // { // if (CurrentDb == "BANKACCOUNT") // { // ss =new BankAccountViewModel() ; // ss = BankCurrentRow.Item as BankAccountViewModel; // } // else // { // sa = new DetailsViewModel (); // sa = DetailsCurrentRow.Item as DetailsViewModel; // } // } // //else if (CurrentDb == "DETAILS") // //{ // // sa = new DetailsViewModel (); // // sa = DetailsCurrentRow.Item as DetailsViewModel; // //} // else if (CurrentDb == "CUSTOMER") // { // cs = new CustomerViewModel (); // cs = CustomerCurrentRow.Item as CustomerViewModel; // } //} //else // { // if (CurrentDb == "BANKACCOUNT" || CurrentDb == "DETAILS") // { // if (CurrentDb == "BANKACCOUNT") // { //// ss = new BankAccountViewModel() ; // ss = Row.Item as BankAccountViewModel; // } // else // { // sa = new DetailsViewModel (); // sa = Row.Item as DetailsViewModel; // } // } // //else if (CurrentDb == "DETAILS") // //{ // // sa = new DetailsViewModel (); // // sa =Row.Item as DetailsViewModel; // //} // else if (CurrentDb == "CUSTOMER") // { // cs = new CustomerViewModel (); // cs = Row.Item as CustomerViewModel; // } // } if (CurrentDb == "BANKACCOUNT" || CurrentDb == "DETAILS") { try { //Sanity check - are values actualy valid ??? //They should be as Grid vlaidate entries itself !! int x; decimal Y; if (CurrentDb == "BANKACCOUNT") { // ss = Row.Item as BankAccountViewModel; x = Convert.ToInt32(ss.Id); x = Convert.ToInt32(ss.AcType); //Check for invalid A/C Type if (x < 1 || x > 4) { Console.WriteLine($"SQL UpdateDbRow(92) Invalid A/c type of {ss.AcType} in grid Data"); MessageBox.Show($"Invalid A/C Type ({ss.AcType}) in the Grid !!!!\r\nPlease correct this entry!"); return(false); } Y = Convert.ToDecimal(ss.Balance); Y = Convert.ToDecimal(ss.IntRate); //Check for invalid Interest rate if (Y > 100) { Console.WriteLine($"SQL UpdateDbRow(101) Invalid Interest Rate of {ss.IntRate} > 100% in grid Data"); MessageBox.Show($"Invalid Interest rate ({ss.IntRate}) > 100 entered in the Grid !!!!\r\nPlease correct this entry!"); return(false); } DateTime dtm = Convert.ToDateTime(ss.ODate); dtm = Convert.ToDateTime(ss.CDate); } else if (CurrentDb == "DETAILS") { // sa = Row.Item as DetailsViewModel; x = Convert.ToInt32(sa.Id); x = Convert.ToInt32(sa.AcType); //Check for invalid A/C Type if (x < 1 || x > 4) { Console.WriteLine($"SQL UpdateDbRow(117) Invalid A/c type of {sa.AcType} in grid Data"); MessageBox.Show($"Invalid A/C Type ({sa.AcType}) in the Grid !!!!\r\nPlease correct this entry!"); return(false); } Y = Convert.ToDecimal(sa.Balance); Y = Convert.ToDecimal(sa.IntRate); //Check for invalid Interest rate if (Y > 100) { Console.WriteLine($"SQL UpdateDbRow(126) Invalid Interest Rate of {sa.IntRate} > 100% in grid Data"); MessageBox.Show($"Invalid Interest rate ({sa.IntRate}) > 100 entered in the Grid !!!!\r\nPlease correct this entry!"); return(false); } DateTime dtm = Convert.ToDateTime(sa.ODate); dtm = Convert.ToDateTime(sa.CDate); } // string sndr = sender.ToString(); } catch (Exception ex) { Console.WriteLine($"SQL UpdateDbRow(137) Invalid grid Data - {ex.Message} Data = {ex.Data}"); MessageBox.Show("Invalid data entered in the Grid !!!! - See Output for details.\r\nNEITHER Db has been updated !!"); return(false); } SqlConnection con = null; string ConString = ""; ConString = (string)Properties.Settings.Default["BankSysConnectionString"]; // @"Data Source = (localdb)\MSSQLLocalDB; Initial Catalog = 'C:\USERS\IANCH\APPDATA\LOCAL\MICROSOFT\MICROSOFT SQL SERVER LOCAL DB\INSTANCES\MSSQLLOCALDB\IAN1.MDF'; Integrated Security = True; Connect Timeout = 30; Encrypt = False; TrustServerCertificate = False; ApplicationIntent = ReadWrite; MultiSubnetFailover = False"; // con = new SqlConnection (ConString); try { //We need to update BOTH BankAccount AND DetailsViewModel to keep them in parallel using (con = new SqlConnection(ConString)) { con.Open(); if (CurrentDb == "BANKACCOUNT") //|| CurrentDb == "DETAILS" ) { SqlCommand cmd = new SqlCommand("UPDATE BankAccount SET BANKNO=@bankno, CUSTNO=@custno, ACTYPE=@actype, BALANCE=@balance, INTRATE=@intrate, ODATE=@odate, CDATE=@cdate WHERE BankNo=@BankNo", con); cmd.Parameters.AddWithValue("@id", Convert.ToInt32(ss.Id)); cmd.Parameters.AddWithValue("@bankno", ss.BankNo.ToString()); cmd.Parameters.AddWithValue("@custno", ss.CustNo.ToString()); cmd.Parameters.AddWithValue("@actype", Convert.ToInt32(ss.AcType)); cmd.Parameters.AddWithValue("@balance", Convert.ToDecimal(ss.Balance)); cmd.Parameters.AddWithValue("@intrate", Convert.ToDecimal(ss.IntRate)); cmd.Parameters.AddWithValue("@odate", Convert.ToDateTime(ss.ODate)); cmd.Parameters.AddWithValue("@cdate", Convert.ToDateTime(ss.CDate)); await cmd.ExecuteNonQueryAsync(); Console.WriteLine("SQL Update successful for Bank Account Data..."); cmd = new SqlCommand("UPDATE SecAccounts SET BANKNO=@bankno, CUSTNO=@custno, ACTYPE=@actype, BALANCE=@balance, INTRATE=@intrate, ODATE=@odate, CDATE=@cdate WHERE BankNo=@BankNo", con); cmd.Parameters.AddWithValue("@id", Convert.ToInt32(ss.Id)); cmd.Parameters.AddWithValue("@bankno", ss.BankNo.ToString()); cmd.Parameters.AddWithValue("@custno", ss.CustNo.ToString()); cmd.Parameters.AddWithValue("@actype", Convert.ToInt32(ss.AcType)); cmd.Parameters.AddWithValue("@balance", Convert.ToDecimal(ss.Balance)); cmd.Parameters.AddWithValue("@intrate", Convert.ToDecimal(ss.IntRate)); cmd.Parameters.AddWithValue("@odate", Convert.ToDateTime(ss.ODate)); cmd.Parameters.AddWithValue("@cdate", Convert.ToDateTime(ss.CDate)); await cmd.ExecuteNonQueryAsync(); Console.WriteLine("SQL Update successful for Secondary Accounts Data..."); cmd = new SqlCommand("UPDATE Customer SET BANKNO=@bankno, CUSTNO=@custno, ACTYPE=@actype, ODATE=@odate, CDATE=@cdate WHERE BankNo=@BankNo", con); cmd.Parameters.AddWithValue("@id", Convert.ToInt32(ss.Id)); cmd.Parameters.AddWithValue("@bankno", ss.BankNo.ToString()); cmd.Parameters.AddWithValue("@custno", ss.CustNo.ToString()); cmd.Parameters.AddWithValue("@actype", Convert.ToInt32(ss.AcType)); cmd.Parameters.AddWithValue("@odate", Convert.ToDateTime(ss.ODate)); cmd.Parameters.AddWithValue("@cdate", Convert.ToDateTime(ss.CDate)); await cmd.ExecuteNonQueryAsync(); Console.WriteLine("SQL Update successful for Customers Data..."); } else if (CurrentDb == "DETAILS") { SqlCommand cmd = new SqlCommand("UPDATE BankAccount SET BANKNO=@bankno, CUSTNO=@custno, ACTYPE=@actype, BALANCE=@balance, INTRATE=@intrate, ODATE=@odate, CDATE=@cdate WHERE BankNo=@BankNo", con); cmd.Parameters.AddWithValue("@id", Convert.ToInt32(sa.Id)); cmd.Parameters.AddWithValue("@bankno", sa.BankNo.ToString()); cmd.Parameters.AddWithValue("@custno", sa.CustNo.ToString()); cmd.Parameters.AddWithValue("@actype", Convert.ToInt32(sa.AcType)); cmd.Parameters.AddWithValue("@balance", Convert.ToDecimal(sa.Balance)); cmd.Parameters.AddWithValue("@intrate", Convert.ToDecimal(sa.IntRate)); cmd.Parameters.AddWithValue("@odate", Convert.ToDateTime(sa.ODate)); cmd.Parameters.AddWithValue("@cdate", Convert.ToDateTime(sa.CDate)); await cmd.ExecuteNonQueryAsync(); Console.WriteLine("SQL Update successful for Bank Account Data..."); cmd = new SqlCommand("UPDATE SecAccounts SET BANKNO=@bankno, CUSTNO=@custno, ACTYPE=@actype, BALANCE=@balance, INTRATE=@intrate, ODATE=@odate, CDATE=@cdate WHERE BankNo=@BankNo", con); cmd.Parameters.AddWithValue("@id", Convert.ToInt32(sa.Id)); cmd.Parameters.AddWithValue("@bankno", sa.BankNo.ToString()); cmd.Parameters.AddWithValue("@custno", sa.CustNo.ToString()); cmd.Parameters.AddWithValue("@actype", Convert.ToInt32(sa.AcType)); cmd.Parameters.AddWithValue("@balance", Convert.ToDecimal(sa.Balance)); cmd.Parameters.AddWithValue("@intrate", Convert.ToDecimal(sa.IntRate)); cmd.Parameters.AddWithValue("@odate", Convert.ToDateTime(sa.ODate)); cmd.Parameters.AddWithValue("@cdate", Convert.ToDateTime(sa.CDate)); await cmd.ExecuteNonQueryAsync(); Console.WriteLine("SQL Update successful for Secondary Accounts Data..."); cmd = new SqlCommand("UPDATE Customer SET BANKNO=@bankno, CUSTNO=@custno, ACTYPE=@actype, ODATE=@odate, CDATE=@cdate WHERE BankNo=@BankNo", con); cmd.Parameters.AddWithValue("@id", Convert.ToInt32(sa.Id)); cmd.Parameters.AddWithValue("@bankno", sa.BankNo.ToString()); cmd.Parameters.AddWithValue("@custno", sa.CustNo.ToString()); cmd.Parameters.AddWithValue("@actype", Convert.ToInt32(sa.AcType)); cmd.Parameters.AddWithValue("@odate", Convert.ToDateTime(sa.ODate)); cmd.Parameters.AddWithValue("@cdate", Convert.ToDateTime(sa.CDate)); await cmd.ExecuteNonQueryAsync(); Console.WriteLine("SQL Update successful for Customers Data..."); } } } catch (Exception ex) { Console.WriteLine($"SQL Error UpdateDbRow(180) - BankAccount/Sec" + $"accounts not updated {ex.Message} Data = {ex.Data}"); #if SHOWSQLERRORMESSAGEBOX MessageBox.Show("SQL error occurred - See Output for details"); #endif } finally { con.Close(); } } else if (CurrentDb == "CUSTOMER") { if (Row == null && CurrentDb == "CUSTOMER") { cs = CustomerCurrentRow.Item as CustomerViewModel; } try { //Sanity check - are values actualy valid ??? //They should be as Grid vlaidate entries itself !! int x; x = Convert.ToInt32(cs.Id); // string sndr = sender.ToString(); x = Convert.ToInt32(cs.AcType); //Check for invalid A/C Type if (x < 1 || x > 4) { Console.WriteLine($"SQL UpdateDbRow(204) Invalid A/c type of {cs.AcType} in grid Data"); MessageBox.Show($"Invalid A/C Type ({cs.AcType}) in the Grid !!!!\r\nPlease correct this entry!"); return(false); } DateTime dtm = Convert.ToDateTime(cs.ODate); dtm = Convert.ToDateTime(cs.CDate); dtm = Convert.ToDateTime(cs.Dob); } catch (Exception ex) { Console.WriteLine($"SQL Invalid grid Data UpdateDbRow(214)- {ex.Message} Data = {ex.Data}"); MessageBox.Show("Invalid data entered in the Grid !!!! - See Output for details"); return(false); } SqlConnection con; string ConString = ""; ConString = (string)Properties.Settings.Default["BankSysConnectionString"]; // @"Data Source = (localdb)\MSSQLLocalDB; Initial Catalog = 'C:\USERS\IANCH\APPDATA\LOCAL\MICROSOFT\MICROSOFT SQL SERVER LOCAL DB\INSTANCES\MSSQLLOCALDB\IAN1.MDF'; Integrated Security = True; Connect Timeout = 30; Encrypt = False; TrustServerCertificate = False; ApplicationIntent = ReadWrite; MultiSubnetFailover = False"; con = new SqlConnection(ConString); try { //We need to update BOTH BankAccount AND DetailsViewModel to keep them in parallel using (con) { con.Open(); SqlCommand cmd = new SqlCommand("UPDATE Customer SET CUSTNO=@custno, BANKNO=@bankno, ACTYPE=@actype, " + "FNAME=@fname, LNAME=@lname, ADDR1=@addr1, ADDR2=@addr2, TOWN=@town, COUNTY=@county, PCODE=@pcode," + "PHONE=@phone, MOBILE=@mobile, DOB=@dob,ODATE=@odate, CDATE=@cdate WHERE Id=@id", con); cmd.Parameters.AddWithValue("@id", Convert.ToInt32(cs.Id)); cmd.Parameters.AddWithValue("@custno", cs.CustNo.ToString()); cmd.Parameters.AddWithValue("@bankno", cs.BankNo.ToString()); cmd.Parameters.AddWithValue("@actype", Convert.ToInt32(cs.AcType)); cmd.Parameters.AddWithValue("@fname", cs.FName.ToString()); cmd.Parameters.AddWithValue("@lname", cs.LName.ToString()); cmd.Parameters.AddWithValue("@addr1", cs.Addr1.ToString()); cmd.Parameters.AddWithValue("@addr2", cs.Addr2.ToString()); cmd.Parameters.AddWithValue("@town", cs.Town.ToString()); cmd.Parameters.AddWithValue("@county", cs.County.ToString()); cmd.Parameters.AddWithValue("@pcode", cs.PCode.ToString()); cmd.Parameters.AddWithValue("@phone", cs.Phone.ToString()); cmd.Parameters.AddWithValue("@mobile", cs.Mobile.ToString()); cmd.Parameters.AddWithValue("@dob", Convert.ToDateTime(cs.Dob)); cmd.Parameters.AddWithValue("@odate", Convert.ToDateTime(cs.ODate)); cmd.Parameters.AddWithValue("@cdate", Convert.ToDateTime(cs.CDate)); await cmd.ExecuteNonQueryAsync(); Console.WriteLine("SQL Update successful for Customers Data..."); cmd = new SqlCommand("UPDATE BankAccount SET BANKNO=@bankno, CUSTNO=@custno, ACTYPE=@actype, ODATE=@odate, CDATE=@cdate WHERE BankNo=@BankNo", con); cmd.Parameters.AddWithValue("@id", Convert.ToInt32(cs.Id)); cmd.Parameters.AddWithValue("@bankno", cs.BankNo.ToString()); cmd.Parameters.AddWithValue("@custno", cs.CustNo.ToString()); cmd.Parameters.AddWithValue("@actype", Convert.ToInt32(cs.AcType)); cmd.Parameters.AddWithValue("@odate", Convert.ToDateTime(cs.ODate)); cmd.Parameters.AddWithValue("@cdate", Convert.ToDateTime(cs.CDate)); await cmd.ExecuteNonQueryAsync(); Console.WriteLine("SQL Update successful for Bank Account Data..."); cmd = new SqlCommand("UPDATE SecAccounts SET BANKNO=@bankno, CUSTNO=@custno, ACTYPE=@actype, ODATE=@odate, CDATE=@cdate WHERE BankNo=@BankNo", con); cmd.Parameters.AddWithValue("@id", Convert.ToInt32(cs.Id)); cmd.Parameters.AddWithValue("@bankno", cs.BankNo.ToString()); cmd.Parameters.AddWithValue("@custno", cs.CustNo.ToString()); cmd.Parameters.AddWithValue("@actype", Convert.ToInt32(cs.AcType)); cmd.Parameters.AddWithValue("@odate", Convert.ToDateTime(cs.ODate)); cmd.Parameters.AddWithValue("@cdate", Convert.ToDateTime(cs.CDate)); await cmd.ExecuteNonQueryAsync(); Console.WriteLine("SQL Update successful for Secondary Accounts Data..."); } } catch (Exception ex) { con.Close(); Console.WriteLine($"SQL Error UpdateDbRow(255)- {ex.Message} Data = {ex.Data}"); #if SHOWSQLERRORMESSAGEBOX MessageBox.Show("SQL error occurred - See Output for details"); #endif } finally { //Lets force the grids to update when we return from here ?? Console.WriteLine($"SQL - Updated Row for {CurrentDb}"); con.Close(); } SqlDbViewer.UpdateAllOpenViewers(); return(true); } SqlDbViewer.UpdateAllOpenViewers(); return(true); }
public static void TriggerNotifyOfDataChange(SqlDbViewer sender, DataGrid Grid, DataChangeArgs args) { NotifyOfDataChange?.Invoke(sender, Grid, args); }
//********************************************************************************************// private async void HandleSelection(ListBox listbox, string Command) { // This is the FIRST Fn Called when Opening/ Closing/deleting a Db Viewer window //and most other functionality int selected = -1; string selectedItem = ""; if (listbox == sqlSelector) { //upper listbox - NEW command if (Command == "NEW") { selectedItem = listbox.SelectedItem.ToString(); if (selectedItem.ToUpper().Contains("MULTI BANK")) { selected = 2; } else if (selectedItem.ToUpper().Contains("BANK")) { selected = 0; } else if (selectedItem.ToUpper().Contains("CUSTOMER")) { selected = 1; } Mouse.OverrideCursor = Cursors.Wait; ////*****************************************************// //// Load and display a new viewer for the selected Db Type //// (returned in the selected var from dbSelector window) ////*****************************************************// //SqlDbViewer NewSqlViewer = new SqlDbViewer (selected); if (ViewersList.Items.Count > 10) { Mouse.OverrideCursor = Cursors.Arrow; MessageBox.Show("Sorry, but there is a limit of TEN Viewers open at any one time.\r\nPlease close one or more Viewers if you want to open a new one.", "Maximum Viewers Open !"); return; } // find first blank entry of the 10 available slots we have // and save our details into it for (int x = 0; x < MainWindow.gv.MaxViewers; x++) { if (MainWindow.gv.window[x] == null) { string currentRowText = ""; MainWindow.gv.ViewerSelectiontype = -1; // reset flag field for next time Stopwatch sw = new Stopwatch(); SqlDbViewer NewSqlViewer = new SqlDbViewer(selected); //*****************************************************// // THIS WORKS PRETTY WELL, THE SQLdBVIEWER WINDOW IS DISPLAYED VIRTUALLY IMMEDIATELY // Load and display a new viewer for the selected Db Type // (returned in the selected var from dbSelector window) //*****************************************************// // SqlDbViewer NewSqlViewer = new SqlDbViewer (selected); // call our Async AWAIT function to spawn the SqlDbViewer Console.WriteLine("1 - Calling StartViewer Task"); sw.Start(); { // // Atempt 4 // // works, but get white window until it has loaded..... bool b = false; string str = ""; Task[] tasks = new Task[1]; tasks[0] = Task.Factory.StartNew(() => StartViewerAsync(NewSqlViewer, selected)); // Wait for the background task to finish tasks[0].Wait(); // StartViewerAsync (NewSqlViewer, selected); { // taskAsync.Start (); // Task<string> task = StartViewer (NewSqlViewer, selected); //task.ContinueWith // (delegate // { // sc.Post (delegate {str = task.Result; }, null); // }); // s => runloader = task.Result, TaskScheduler.FromCurrentSynchronizationContext () Console.WriteLine($"string str = {str}"); } sw.Stop(); //By returning here, the window paints fully !!!! return; //***************************************// { //Thread thread = new Thread (() => //while (true) //{ // Thread.Sleep (100); // if (alldone) // break; //} } } Console.WriteLine($"2 - ***FINAL*** Task returned - took {sw.ElapsedMilliseconds} Milliseconds"); sw.Start(); { // // Atempt 3 // // works, but get white window until it has loaded..... // bool result = await Task.Run (() => StartViewer (selected).ContinueWith (task => CompleteLoad ())); // Console.WriteLine ($"Task result = {result}"); // // Task above returns immediately // // loadViewer.Wait (); // //await Task.WhenAll (loadViewer); } sw.Stop(); Console.WriteLine($"3 - Overall Load took {sw.ElapsedMilliseconds} Milliseconds"); { //// Atempt 2 //// works, but get white window until it has loaded..... //Task<bool> loadViewer = StartViewer (selected); //// Task above returns immediately //loadViewer.Wait (); ////await Task.WhenAll (loadViewer); } { // Attempt 1 // Atempt 1 // works, but still get white window until it has loaded..... // var loadViewer = StartViewer (selected); // await Task.WhenAll (loadViewer); } //*****************************************************************************// Console.WriteLine("4 - StartViewer Task - ALL COMPLETED"); //Thread t = new Thread (2000); { //*****************************************************************************// //This actually loads the SQLDbViewer windows and populates it // and it is fully displayed on screen, but with no data in the grid // NewSqlViewer.Show (); //*****************************************************************************// Mouse.OverrideCursor = Cursors.Wait; //NewSqlViewer.DetailsGrid.Visibility = Visibility.Hidden; //NewSqlViewer.WaitMessage.Visibility = Visibility.Visible; //NewSqlViewer.WaitMessage.BringIntoView (); } //while (true) { // if (SqlDbViewer.IsViewerLoaded) // break; // else // { // Thread.Sleep (200); // } //} if (!HoldLoad) { // NOW WE CAN TRIGGER THE LOADING OF ACTUAL DATA IN VIEWER ? Console.WriteLine("Calling NewSqlViewer.HandleWindowLoaded "); if (selected == 0) { NewSqlViewer.HandleWindowLoaded("BANKACCOUNT"); } else if (selected == 1) { NewSqlViewer.HandleWindowLoaded("CUSTOMER"); } else if (selected == 2) { NewSqlViewer.HandleWindowLoaded("DETAILS"); } Console.WriteLine("returned from NewSqlViewer.HandleWindowLoaded "); #pragma LOADING SPEED //if (selected == 0) // BankAccountViewModel.LoadBankTask (); //else if (selected == 1) { //This fully loads the Customer Data into dtCust ONLY // CustomerViewModel.LoadCustomersTask (); //} //// Calls a function to load data into List<> //else if (selected == 2) // DetailsViewModel.LoadDetailsTask (); //Now we can Get the data from the current row currentRowText = MainWindow.gv.CurrentDb[x]; { // This DOES update our Property ListBoxItemText //which we "should" be able to use to update the Selector list entries text // but it doesn't work - so far at least //DbSelector dbs = new DbSelector (); //Create/Add new viewer entry (ListBoxItem) to Selection viewer Listbox ListBoxItem lbi = new ListBoxItem(); Binding binding = new Binding("Content"); binding.Source = MainWindow.DbSelectorOpen.ListBoxItemText; // Set Tag of this LB Item to the DbViewer Window lbi.Tag = NewSqlViewer.Tag; //Bind the new lbItem to our Data source lbi.SetBinding(ContentProperty, binding); //update our DependencyProperty ListBoxItemText - in DbSelector.cs MainWindow.DbSelectorOpen.ListBoxItemText = currentRowText; //This is the normal way to update the lists data lbi.Content = MainWindow.DbSelectorOpen.ListBoxItemText; lbi.Content = MainWindow.gv.PrettyDetails; // update BankAccountViewModel data as required int indx = ViewersList.Items.Add(lbi); ViewersList.SelectedIndex = indx; NewSqlViewer.Focus(); ViewersList.Items.Refresh(); if (ViewersList.Items.Count > 1) { ViewerDeleteAll.IsEnabled = true; ViewerDelete.IsEnabled = true; } //************************************* // DetailsGrid is now fully populated 2/4/21 //************************************* NewSqlViewer.WaitMessage.Visibility = Visibility.Collapsed; if (selected == 0) { NewSqlViewer.BankGrid.Visibility = Visibility.Visible; } else if (selected == 1) { NewSqlViewer.CustomerGrid.Visibility = Visibility.Visible; } else if (selected == 2) { NewSqlViewer.DetailsGrid.Visibility = Visibility.Visible; } if (BankAccountViewModel.BankAccountObs != null) { Flags.ActiveSqlGrid.ItemsSource = CollectionViewSource.GetDefaultView(BankAccountViewModel.BankAccountObs); } // This WORKS for details 2/4/21 Debug.WriteLine($" *** Current Active...3 = {Flags.ActiveSqlGridStr}\r\n"); if (Flags.ActiveSqlGrid?.ItemsSource != null) { CollectionViewSource.GetDefaultView(Flags.ActiveSqlGrid.ItemsSource).Refresh(); } Mouse.OverrideCursor = Cursors.Arrow; return; } } } } Mouse.OverrideCursor = Cursors.Arrow; return; NewSqlViewer.HandleWindowLoaded("CUSTOMER"); } } else if (listbox == ViewersList) { if (Command == "SELECT") { // // This works = 22 March 2021 // int selindex = -1; selindex = ViewersList.SelectedIndex; ListBoxItem lbi = new ListBoxItem(); lbi = ViewersList.Items[selindex] as ListBoxItem; int SelectedId = MainWindow.gv.ListBoxId[selindex - 1]; Window w = MainWindow.gv.window[selindex - 1]; w.Show(); w.Topmost = true; w.Focus(); w.Topmost = false; return; } else if (Command == "DELETE") { // // This also works = 22 March 2021 // int selindex = -1; selindex = ViewersList.SelectedIndex; ListBoxItem lbi = new ListBoxItem(); lbi = ViewersList.Items[selindex] as ListBoxItem; for (int x = 0; x < MainWindow.gv.MaxViewers; x++) { try { if (ViewersList.SelectedItem != null) { if (MainWindow.gv.ListBoxId[x] == (int)lbi.Tag) { // found the match - so delete viewer and remove from Viewers list CloseviewerWindow(x); // ViewersList.Items.RemoveAt (selindex); break; } } } catch { } } if (ViewersList.Items.Count >= 1) { ViewersList.SelectedIndex = selindex; } ViewersList.Items.Refresh(); return; } else if (Command == "DELETEALL") { // // This also works = 22 March 2021 // // Close/Delete ALL open viewers for (int x = 0; x < MainWindow.gv.MaxViewers; x++) { //Close the viewer if (MainWindow.gv.window[x] != null) { MainWindow.gv.window[x].Close(); } //remove all record of it's very existence MainWindow.gv.window[x] = null; MainWindow.gv.CurrentDb[x] = ""; MainWindow.gv.ListBoxId[x] = -1; MainWindow.gv.ViewerSelectiontype = -1; // reset flag field for next time } MainWindow.gv.ViewerCount = 0; for (int x = MainWindow.gv.MaxViewers; x > 0; x--) { if (ViewersList.Items.Count == x + 1) { ViewersList.Items.RemoveAt(x); // break; } } } } }
public SQLFilter(SqlDbViewer Viewparent) { parent = Viewparent; InitializeComponent(); }