using SteamWare; using System; using System.Data; using System.Web.UI; using System.Web.UI.WebControls; public partial class mod_macchine : ApplicationUserControl { #region area da NON modificare #region area protected protected string _idxGridView; protected string _idxGridViewExt; protected bool _showNewBtn = false; /// /// imposta errore non cancellabilità per record correlati /// protected void setNoDeletableErrorMessage() { // mostro avviso di non cancellabilità... lblWarning.Text = traduci("notDeletable_hasChild"); lblWarning.Visible = true; grView.DataBind(); } /// /// esegue cancellazione record /// protected void doDelete() { // posso cancellare... lblWarning.Visible = false; ods.Delete(); } /// /// Valida la cancellazione per i dati mostrati dal gridView /// richiede sia preventivamentedichiarato _idxGridView /// /// /// protected virtual void validaDelete(object sender, ObjectDataSourceMethodEventArgs e) { int idx = Convert.ToInt32(e.InputParameters[string.Format("Original_{0}", _idxGridView)]); if (objIsNotRelated(idx)) { // annullo cancellazione... e.Cancel = true; // seleziono record... metto in session valore idx e poi ridisegno... SteamWare.memLayer.ML.setSessionVal(_idxGridView, idx); setNoDeletableErrorMessage(); } else { doDelete(); } } /// /// inserisce nuovo valore da footer /// /// /// protected void lblIns_click(object sender, EventArgs e) { // click su inserimento, chiamo il metodo insert dell'ObjectDataSource ods.Insert(); } /// /// annulla inserimento nuovo valore da footer /// /// /// protected void lblCanc_click(object sender, EventArgs e) { // annullo inserimento: nascondo footer, bind controlli... grView.FooterRow.Visible = false; } /// /// aggiorna controlli datagrid e numero righe in pagina /// protected override void aggiornaControlliDataGL() { base.aggiornaControlliDataGL(); //grViewShort.PageSize = _righeDataGridAnagr; //grView.PageSize = _righeDataGridMed; } /// /// traduce gli header delle colonne /// /// /// protected void grView_DataBound(object sender, EventArgs e) { if (grView.Rows.Count > 0) { LinkButton lb; // aggiorno gli headers foreach (TableCell cella in grView.HeaderRow.Cells) { try { lb = (LinkButton)cella.Controls[0]; lb.Text = traduci(lb.Text); } catch { } } int totRecord = grView.Rows.Count + grView.PageSize * (grView.PageCount - 1); lblNumRec.Text = string.Format("{0} records of ~ {1}", grView.Rows.Count, totRecord); } else { lblNumRec.Text = ""; } } /// /// traduce gli header delle colonne /// /// /// protected void grViewShort_DataBound(object sender, EventArgs e) { if (grViewShort.Rows.Count > 0) { LinkButton lb; // aggiorno gli headers foreach (TableCell cella in grViewShort.HeaderRow.Cells) { try { lb = (LinkButton)cella.Controls[0]; lb.Text = traduci(lb.Text); } catch { } } int totRecord = grViewShort.Rows.Count + grViewShort.PageSize * (grViewShort.PageCount - 1); lblNumRec.Text = string.Format("{0} records of ~ {1}", grViewShort.Rows.Count, totRecord); } else { lblNumRec.Text = ""; } } /// /// gestione evento richeista nuovo valore (mostra footer, ...) /// /// /// protected void btnNew_Click(object sender, EventArgs e) { // reset selezione... resetSelezione(); // mostro il footer oppure la riga dei dettagli x nuovo... if (grView.FooterRow != null) { grView.FooterRow.Visible = true; } // sollevo evento nuovo valore... if (eh_nuovoValore != null) { eh_nuovoValore(this, new EventArgs()); } } /// /// reset della selezione /// /// /// protected void btnReset_Click(object sender, EventArgs e) { resetSelezione(); } /// /// reset della selezione /// /// /// protected void btnResetShort_Click(object sender, EventArgs e) { grViewShort.SelectedIndex = -1; grViewShort.DataBind(); lblWarning.Visible = false; } /// /// gestione cambio selezione valore /// /// /// protected void grView_SelectedIndexChanged(object sender, EventArgs e) { // salvo in session il valore selezionato... SteamWare.memLayer.ML.setSessionVal(string.Format("{0}_sel", _idxGridView), grView.SelectedValue); // sollevo evento nuovo valore... if (eh_selValore != null) { eh_selValore(this, new EventArgs()); } } /// /// resetta la selezione dei valori in caso di modifiche su altri controlli /// public void resetSelezione() { SteamWare.memLayer.ML.emptySessionVal(string.Format("{0}_sel", _idxGridView)); grView.SelectedIndex = -1; grView.DataBind(); lblWarning.Visible = false; if (eh_resetSelezione != null) { eh_resetSelezione(this, new EventArgs()); } } #endregion #region gestione eventi public event EventHandler eh_resetSelezione; public event EventHandler eh_nuovoValore; public event EventHandler eh_selValore; #endregion #region public /// /// definisce visibilità btnNew /// public bool showNewBtn { get { return _showNewBtn; } set { _showNewBtn = value; } } #endregion #endregion #region area codice variabile /// /// recupera i dati di un nuovo record contenuti nel footer di un gridView; /// questi devono esses opportunamente nominati (es: txt{0}, dl{0}, ...) /// /// /// protected void recuperaFooter(object sender, ObjectDataSourceMethodEventArgs e) { //recupero la riga footer... DataColumnCollection colonne = colonneObj(); string nomeCol; string tipoColonna = ""; foreach (DataColumn colonna in colonne) { nomeCol = colonna.ColumnName; // cerco un textbox o quello che sia... if (grView.FooterRow.FindControl(string.Format("txt{0}", nomeCol)) != null) { tipoColonna = "textBox"; } else if (grView.FooterRow.FindControl(string.Format("cal_{0}", nomeCol)) != null) { tipoColonna = "calTextBox"; } else if (grView.FooterRow.FindControl(string.Format("dl{0}", nomeCol)) != null) { tipoColonna = "dropDownList"; } else if (grView.FooterRow.FindControl(string.Format("chk{0}", nomeCol)) != null) { tipoColonna = "checkBox"; } else if (grView.FooterRow.FindControl(string.Format("selAjax_{0}", nomeCol)) != null) { tipoColonna = "selAjax"; } // in base al tipo salvo negli inputparameters dell'ODS switch (tipoColonna) { case "textBox": e.InputParameters[nomeCol] = ((TextBox)grView.FooterRow.FindControl(string.Format("txt{0}", nomeCol))).Text; break; case "calTextBox": e.InputParameters[nomeCol] = Convert.ToDateTime(((TextBox)grView.FooterRow.FindControl(string.Format("cal_{0}", nomeCol))).Text); break; case "dropDownList": e.InputParameters[nomeCol] = ((DropDownList)grView.FooterRow.FindControl(string.Format("dl{0}", nomeCol))).SelectedValue; break; case "checkBox": e.InputParameters[nomeCol] = ((CheckBox)grView.FooterRow.FindControl(string.Format("dl{0}", nomeCol))).Checked; break; case "selAjax": e.InputParameters[nomeCol] = ((mod_selettore_ajax)grView.FooterRow.FindControl(string.Format("selAjax_{0}", nomeCol))).valore; break; default: break; } tipoColonna = ""; } } /// /// devo mostrare meno colonne /// protected bool _dispLessCol = false; /// /// effettua update del modulo /// public void doUpdate() { resetSelezione(); updateOdsDaFiltro(); grView.SelectedIndex = -1; grView.DataBind(); grViewShort.SelectedIndex = -1; grViewShort.DataBind(); } /// /// verifica complessiva non esistenza record child /// /// /// protected bool objIsNotRelated(object idxObj) { bool answ = false; try { answ = (TA_app.obj.taInterventiMtz.getByIdxMacchina(Convert.ToInt32(idxObj)).Rows.Count == 0); } catch { } return answ; } /// /// elenco colonne del datagrid /// /// protected DataColumnCollection colonneObj() { GIM_dataLayer.DS_applicazione.v_macchineDataTable tabella = new GIM_dataLayer.DS_applicazione.v_macchineDataTable(); DataColumnCollection colonne = tabella.Columns; return colonne; } /// /// inizializzazione valori di default /// /// protected override void OnInit(EventArgs e) { base.OnInit(e); mod_filtroImpianti.eh_selValore += new EventHandler(mod_filtroImpianti_eh_selValore); if (!Page.IsPostBack) { mod_filtroImpianti.ods = odsImpianti; } _idxGridView = "idxmacchina"; // determino quale grView a seconda del tipo visibilità colonne... if (_dispLessCol) { grView.Visible = false; grViewShort.Visible = true; } else { grView.Visible = true; grViewShort.Visible = false; } updateOdsDaFiltro(); } /// /// aggiorna visualizzazioni varie /// private void aggiornaAll() { // imposto visibilità filtro in base a tipo controllo if (vistaModulo == tipoVistaMod.selezione) { mod_filtroImpianti.Visible = false; } else { mod_filtroImpianti.Visible = true; } } void mod_filtroImpianti_eh_selValore(object sender, EventArgs e) { if (mod_filtroImpianti.valoreInt != 0) { // salvo il valore selezionato... idxImpiantoSel = mod_filtroImpianti.valoreInt; } doUpdate(); } /// /// verifica e sistema il filtro dell'ods... /// private void updateOdsDaFiltro() { string filterExpr = " (codMacchina LIKE '%{0}%' OR nomeMacchina LIKE '%{0}%' OR modello LIKE '%{0}%' OR matricola LIKE '%{0}%' OR descrImpianto LIKE '%{0}%') "; if (vistaModulo == tipoVistaMod.selezione || (mod_filtroImpianti.Visible && mod_filtroImpianti.valore != "*")) { filterExpr += " AND idxImpianto = {1} "; } ods.FilterExpression = filterExpr; } /// /// setta selected alla riga il cui valore key è in session /// /// /// protected void grView_RowDataBound(object sender, GridViewRowEventArgs e) { // se riga di dati... if (e.Row.RowType == DataControlRowType.DataRow) { // ottengo la riga tipizzata... System.Data.DataRowView _drv = (System.Data.DataRowView)e.Row.DataItem; GIM_dataLayer.DS_applicazione.v_macchineRow riga = (GIM_dataLayer.DS_applicazione.v_macchineRow)_drv.Row; if (SteamWare.memLayer.ML.StringSessionObj(_idxGridView) == riga.idxImpianto.ToString()) { grView.SelectedIndex = e.Row.RowIndex; // salvo in session il valore selezionato... SteamWare.memLayer.ML.setSessionVal(string.Format("{0}_sel", _idxGridView), SteamWare.memLayer.ML.StringSessionObj(_idxGridView)); // sollevo evento nuovo valore... if (eh_selValore != null) { eh_selValore(this, new EventArgs()); } } } } /// /// svuoto da cache post update /// /// /// protected void ods_Updated(object sender, ObjectDataSourceStatusEventArgs e) { // svuoto da cache... doUpdate(); } /// /// gestione evento inserimento nuovo record standard (se ZERO presenti) /// /// /// protected void btnNewFromEmpty_Click(object sender, EventArgs e) { // reset selezione... resetSelezione(); // i primi valori ("0") di default sono "ND"... li inserisco come standard... string codMacc = memLayer.ML.confReadString("defaultCodMacc"); TA_app.obj.taMacchine.Insert(idxImpiantoSel, codMacc, memLayer.ML.confReadString("newMacchina"), memLayer.ML.confReadString("newModello"), "", DateTime.Now.Year, 0, 0, DateTime.Today, DateTime.Today.AddYears(10)); //doUpdate(); // sollevo evento nuovo valore... if (eh_nuovoValore != null) { eh_nuovoValore(this, new EventArgs()); } } /// /// salvo in session che il prox comando è clonare... /// /// /// protected void imgClona_Click(object sender, ImageClickEventArgs e) { SteamWare.memLayer.ML.setSessionVal("nextObjCommand", "clonaObj"); } /// /// in caso di aggiornamento verifico se sia salvato un comando clona... /// /// /// protected void grView_RowUpdating(object sender, GridViewUpdateEventArgs e) { // carico l'idx dell'oggetto int _idx = Convert.ToInt32(e.Keys["idxMacchina"]); string _comando = ""; if (SteamWare.memLayer.ML.isInSessionObject("nextObjCommand")) { _comando = SteamWare.memLayer.ML.StringSessionObj("nextObjCommand"); SteamWare.memLayer.ML.emptySessionVal("nextObjCommand"); } // verifico il tipo di richiesta (up/down level, clona o update normale switch (_comando) { case "clonaObj": TA_app.obj.taMacchine.sp_clonaMacchina(_idx); grView.EditIndex = -1; grView.DataBind(); // blocco update! e.Cancel = true; break; default: // faccio update! break; } } /// /// determina se sia abilitata la cancellazione della macchina /// public bool isDelEnabled(object cosa, object idx) { bool answ = isWritable(); if (answ) { answ = false; // controllo se ci siano record correlati... if (objIsNotRelated(idx)) { answ = isVisible(cosa); } else { answ = false; } } return answ; } /// /// indica il valore dell'impianto filtrato in visualizzazione /// public int idxImpiantoSel { get { int answ = 1; try { answ = Convert.ToInt32(lblImpianto.Text); } catch { answ = 1; } return answ; } set { lblImpianto.Text = value.ToString(); aggiornaAll(); } } /// /// definisce se mostrare meno colonne (per funzione MOVE delle macchine tra diversi impianti) /// public bool dispLessCol { get { return _dispLessCol; } set { _dispLessCol = value; } } /// /// definisce se mostrare o meno una colonna... /// public bool mostraColonna { get { return !_dispLessCol; } } /// /// restituisce idx della macchina selezionata nel grVIew versione "short" /// public int idxMacchinaSel { get { int answ = -1; try { answ = Convert.ToInt32(grViewShort.SelectedValue); } catch { } return answ; } } /// /// cambio pagina... /// /// /// protected void grView_PageIndexChanged(object sender, EventArgs e) { doUpdate(); } /// /// sort! /// /// /// protected void grView_Sorted(object sender, EventArgs e) { doUpdate(); } #endregion protected void grView_RowEditing(object sender, GridViewEditEventArgs e) { doUpdate(); } protected void grView_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) { doUpdate(); } }