using SteamWare; using System; using System.Data; using System.Web.UI; using System.Web.UI.WebControls; public partial class mod_impianti : 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(); } } /// /// 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 = ""; } } /// /// 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(); grView.PageSize = _righeDataGridMed; } /// /// 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(); } /// /// 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; } } /// /// effettua update del modulo /// public void doUpdate() { resetSelezione(); } #endregion #endregion #region area codice variabile /// /// verifica complessiva non esistenza record child /// /// /// protected bool objIsNotRelated(object idxObj) { bool answ = false; try { answ = (TA_app.obj.taInterventiMtz.getByIdxImpianto(Convert.ToInt32(idxObj)).Rows.Count == 0); } catch { } return answ; } /// /// elenco colonne del datagrid /// /// protected DataColumnCollection colonneObj() { GIM_dataLayer.DS_applicazione.AnagImpiantiDataTable tabella = new GIM_dataLayer.DS_applicazione.AnagImpiantiDataTable(); DataColumnCollection colonne = tabella.Columns; return colonne; } /// /// inizializzazione valori di default /// /// protected override void OnInit(EventArgs e) { base.OnInit(e); _idxGridView = "idxImpianto"; } /// /// 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.AnagImpiantiRow riga = (GIM_dataLayer.DS_applicazione.AnagImpiantiRow)_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... } /// /// 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 codImp = memLayer.ML.confReadString("defaultCodImp"); TA_app.obj.taImpianti.Insert(codImp, memLayer.ML.confReadString("newImpianto"), "tipo n.d.", DateTime.Today, DateTime.Today.AddYears(10)); grView.DataBind(); } /// /// 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["idxImpianto"]); 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.taImpianti.sp_clonaImpianto(_idx); grView.EditIndex = -1; grView.DataBind(); // blocco update! e.Cancel = true; break; default: // faccio update! break; } } /// /// determina se sia cancellabile dall'idx (1 e quelli con child NON LO SONO...) /// /// /// public bool isDeletable(object _idx) { bool answ = isWritable(); if (answ) { answ = false; int idx = -1; try { idx = Convert.ToInt32(_idx); } catch { } int numMacchineImpianto = TA_app.obj.taMacchine.getByIdxImpianto(idx).Rows.Count; if (idx > 1 && numMacchineImpianto < 1) answ = true; } return answ; } /// /// determina se sia editabile dall'idx (1 NON LO E'...) /// /// /// public bool isEditable(object _idx) { bool answ = isWritable(); if (answ) { int idx = -1; try { idx = Convert.ToInt32(_idx); } catch { } if (idx > 1) answ = true; } return answ; } /// /// 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 = ""; if (eh_resetSelezione != null) { eh_resetSelezione(this, new EventArgs()); } } } #endregion }