private void avisoCambioBD(string text) { if (this.InvokeRequired) { AvisoCountCambio av = new AvisoCountCambio(avisoCambioBD); object[] objs = new object[] { text }; this.Invoke(av, objs); } else { if (MessageBox.Show(text + "\nPresionar Ok para refrescar vista", "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Warning) == DialogResult.OK) { try { dgvHistorialEnvios.DataSource = MuebleDAO.GetMueblesFromDB(cmbOrderBy.Text, true).Tables[0]; myThread.Abort(); Entidades.TablaMueblesListener myListener = new Entidades.TablaMueblesListener(); myListener.dataBaseChanged += avisoCambioBD; myThread = new Thread(myListener.DataBaseListener); myThread.Start(); } catch (Exception) { MessageBox.Show("No hay conexión con la base de datos, se cerrará este form"); } } } }
private void FrmHistorialDeEnvios_Load(object sender, EventArgs e) { dgvHistorialEnvios.ReadOnly = true; dgvHistorialEnvios.DataSource = MuebleDAO.GetMueblesFromDB("FechaDeEnvio", true).Tables[0]; int c = dgvHistorialEnvios.Columns.Count; for (int i = 0; i < c; i++) { this.cmbOrderBy.Items.Add(dgvHistorialEnvios.Columns[i].HeaderText); } this.cmbOrderBy.SelectedIndex = 0; this.cmbOrderType.SelectedIndex = 0; try { Entidades.TablaMueblesListener myListener = new Entidades.TablaMueblesListener(); myListener.dataBaseChanged += avisoCambioBD; myThread = new Thread(myListener.DataBaseListener); myThread.Start(); } catch (Exception) { MessageBox.Show("No hay conexión con la base de datos, se cerrará este form"); this.Close(); } }
private void bsStockMuebles_CurrentChanged(object sender, EventArgs e) { try { if (this.bsStockMuebles.Count > 0) { this.rtxbMuebleDetails.Text = MuebleDAO.GetDetalleMueble((Mueble)this.bsStockMuebles.Current); } } catch (Exception) { this.rtxbMuebleDetails.Text = string.Empty; } }
/// <summary> /// "Escuchará" a la base de datos para saber si se produjo algún cambio. /// En este ejemplo, al no existir deletes ni updates desde los formularios hago un count de los registros. /// Probablemente sería mejor usar un trigger :p /// </summary> public void DataBaseListener() { while (true) { if (this.cantidadMuebles != MuebleDAO.GetCountMuebles()) { if (this.dataBaseChanged != null) { this.dataBaseChanged.Invoke("La base de datos fue actualizada"); this.cantidadMuebles = MuebleDAO.GetCountMuebles(); } } Thread.Sleep(1000); } }
private void btnOrdenar_Click(object sender, EventArgs e) { bool ascending = false; if (cmbOrderType.Text == "Ascendiente") { ascending = true; } try { dgvHistorialEnvios.DataSource = MuebleDAO.GetMueblesFromDB(cmbOrderBy.Text, ascending).Tables[0]; } catch (Exception) { MessageBox.Show("No hay conexión con la base de datos"); } }
private void btnEnviar_Click(object sender, EventArgs e) { if (MessageBox.Show($"Confirmar envío del mueble " + $"{((Mueble)this.bsStockMuebles.Current).CodigoGuid}", "Envio", MessageBoxButtons.YesNo) == DialogResult.Yes) { try { MuebleDAO.Insert(((Mueble)this.bsStockMuebles.Current)); this.bsStockMuebles.Remove(((Mueble)this.bsStockMuebles.Current)); } catch (Exception ex) { if (MessageBox.Show("Error al insertar en base de datos \n¿Enviar de todos modos?", "Error de envío", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) { this.bsStockMuebles.Remove(((Mueble)this.bsStockMuebles.Current)); } } } }
public TablaMueblesListener() { this.cantidadMuebles = MuebleDAO.GetCountMuebles(); }