private void AggiungiAgevolazioneEccezionale(object sender, EventArgs args) { ElementoNoleggio elementoNoleggio = (ElementoNoleggio)Adapter <ElementoNoleggio, ElementoNoleggioAdapted> .Revert((ElementoNoleggioAdapted)_target.ElementiNoleggioDataGridView.CurrentRow.DataBoundItem); using (ChooseForm form = new ChooseForm()) { //creazione filtro (che in realtà è solo un messaggio) Label messaggio = new Label(); messaggio.Text = "Seleziona l'agevolazione eccezionale"; messaggio.Width = 300; Panel p = new Panel(); p.Controls.Add(messaggio); form.AddFilter(p); //form form.DataGridView.MultiSelect = false; //popolamento tabella form.DataGridView.DataSource = Negozio.GetInstance().AgevolazioniEccezionali.Cast <Agevolazione>().ToList(); if (form.ShowDialog() == DialogResult.OK) { elementoNoleggio.AgevolazioneEccezionale = (IAgevolazioneEccezionale)form.DataGridView.CurrentRow.DataBoundItem; Console.WriteLine((elementoNoleggio.AgevolazioneEccezionale as Agevolazione).Nome); _target.ElementiNoleggioDataGridView.Refresh(); /*La nuova agevolazione eccezionale non è visualizzata nella tabella perchè è un'interfaccia, * anche se da come si vede dalla stampa su console l'oggetto viene aggiornato*/ _target.PrezzoTotaleLabel.Text = string.Format("Prezzo totale: {0}", _noleggio.CalcolaPrezzo(_durataEffettiva, Negozio.MINUTI_TOLLERANZA).ToEuroString()); } ShowPrezzoSingoloElemento(this, EventArgs.Empty); } }
// Crea, inizializza e aggiunge al Target.TableLayoutPanel nell’ordine: una Label e una TextBox. private void AddRow(EditingProperty editingProperty) { // Per inizializzare la Label: // assegnare alla proprietà Text il valore della proprietà Label di editableAttribute; // assegnare alla proprietà AutoSize il valore true, in modo che il testo venga visualizzato correttamente. // Per inizializzare la TextBox: // dimensionare il controllo in modo che // la larghezza sia pari al valore della proprietà Width di editableAttribute e // l’altezza sia pari al valore della proprietà PreferredHeight del controllo stesso; // se la editingProperty è read-only, // disabilitare la TextBox (utilizzare la proprietà Enabled); // assegnare alla proprietà Tag il valore di editingProperty; // infine, collegare all’evento Validating della TextBox il gestore ValidatingHandler. Label label = new Label(); label.Text = editingProperty.Label; label.AutoSize = true; Target.TableLayoutPanel.Controls.Add(label); Control tb = null; if (editingProperty.Mode == "Combo") { tb = new ComboBox(); if (editingProperty.Label.StartsWith("Tipo")) { Type categoria = typeof(Elemento).GetSubtypes().Where(t => t.Name.ToUpper() == editingProperty.Label.Substring(4).ToUpper()).First(); ((ComboBox)tb).Items.AddRange(Negozio.GetInstance().GetTipiPerCategoria(categoria).ToArray()); ((ComboBox)tb).SelectedItem = ((ComboBox)tb).Items.OfType <TipoElemento>().First(); } else if (editingProperty.Label.StartsWith("Stato")) { ((ComboBox)tb).Items.AddRange(Negozio.GetInstance().StatiElemento.ToArray()); ((ComboBox)tb).SelectedItem = ((ComboBox)tb).Items.OfType <StatoElemento>().First(); } } else { tb = new TextBox(); tb.Height = ((TextBox)tb).PreferredHeight; } tb.Width = editingProperty.Width; tb.Enabled = checkIfEnabled(editingProperty); tb.Tag = editingProperty; tb.Validating += ValidatingHandler; Target.TableLayoutPanel.Controls.Add(tb); }