Controllo personalizzato
Gemini78
Gemini78 non è online. Ultima attività: 03/07/2009 19.37.55Gemini78
il 10 novembre 2008 alle 19.47
193 messaggi dal 21 marzo 2008
Ciao a tutti
ho creato il mio primo controllo personalizzato:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BasicFrame.WebControls;

namespace controlliWeb
{
    //[DefaultProperty("Text")]
    [ToolboxData("<{0}:formRicerca runat=server></{0}:formRicerca>")]
    public class formRicerca : WebControl
    {
        BasicFrame.WebControls.BasicDatePicker txtDal, txtAl;
        DropDownList ddlNumeroCamere;        
        Label lblDal, lblAl;
        BasicFrame.WebControls.DateDifferenceValidator ddvDal;
        Table tbRicerca;

        protected override void CreateChildControls()
        {
            this.Controls.Clear();

            tbRicerca = new Table();
            tbRicerca.CellPadding = 2;
            tbRicerca.CellSpacing = 2;
            tbRicerca.Width = Unit.Pixel(368);

            TableRow trPeriodo = new TableRow();
            TableCell tdPeriodo = new TableCell();
            tdPeriodo.ColumnSpan = 3;

            lblDal = new Label();
            lblDal.Text = "Dal ";

            lblAl = new Label();
            lblAl.Text = "Al ";    
      
            txtDal = new BasicFrame.WebControls.BasicDatePicker();
            txtDal.TextBoxColumns = 8;
            txtDal.DateFormat = "dd/MM/yyyy";
            txtDal.TextBoxStyle.CssClass = "text_Box";

            txtAl = new BasicFrame.WebControls.BasicDatePicker();
            txtAl.TextBoxColumns = 8;
            txtAl.DateFormat="dd/MM/yyyy";
            txtAl.TextBoxStyle.CssClass = "text_Box";

            ddvDal = new BasicFrame.WebControls.DateDifferenceValidator();
            ddvDal.ErrorMessage = "*";
            ddvDal.ToolTip = "La data inserita dev'essere precedente alla data del campo Al";
            ddvDal.ControlToCompare = "txtAl";
            ddvDal.ControlToValidate = "txtDal";
            ddvDal.Difference = 1;
            ddvDal.Operator = ValidationCompareOperator.GreaterThanEqual;
            ddvDal.ValidationGroup="vgRicerca";

            tdPeriodo.Controls.Add(lblDal);
            tdPeriodo.Controls.Add(txtDal);
            tdPeriodo.Controls.Add(ddvDal);
            tdPeriodo.Controls.Add(lblAl);
            tdPeriodo.Controls.Add(txtAl);
            trPeriodo.Cells.Add(tdPeriodo);
            tbRicerca.Rows.Add(trPeriodo);

            TableRow trIntestazione = new TableRow();
            TableCell tdIntestazione = new TableCell();
            tdIntestazione.Controls.Add(new LiteralControl("n° camere"));
            tdIntestazione.HorizontalAlign = HorizontalAlign.Right;
            trIntestazione.Cells.Add(tdIntestazione);

            tdIntestazione = new TableCell();
            tdIntestazione.Controls.Add(new LiteralControl("adulti"));
            tdIntestazione.HorizontalAlign = HorizontalAlign.Center;
            trIntestazione.Cells.Add(tdIntestazione);

            tdIntestazione = new TableCell();
            tdIntestazione.Controls.Add(new LiteralControl("bambini"));
            tdIntestazione.HorizontalAlign = HorizontalAlign.Center;
            trIntestazione.Cells.Add(tdIntestazione);
            tbRicerca.Rows.Add(trIntestazione);
            
            for(int i=1; i<6; i++)
            {
                TableRow trCamere = new TableRow();                
                TableCell tdCamere = new TableCell();
                if(i==1)
                {
                    ddlNumeroCamere = new DropDownList();
                    ddlNumeroCamere.CssClass = "text_Box";
                    for(int j=1;j<6;j++)
                        ddlNumeroCamere.Items.Add(new ListItem(j.ToString(),j.ToString()));
                    tdCamere.Controls.Add(ddlNumeroCamere);
                }
                else
                {
                    Label lbl = new Label();
                    lbl.Text = "Camera " + i.ToString();                    
                    tdCamere.Controls.Add(lbl);
                }
                trCamere.Cells.Add(tdCamere);

                tdCamere = new TableCell();
                DropDownList ddlAdulti = new DropDownList();
                ddlAdulti.CssClass = "text_Box";
                ddlAdulti.ID = "txtAdulti" + i.ToString();
                for(int k=0;k<11;k++)
                    ddlAdulti.Items.Add(new ListItem(k.ToString(),k.ToString()));
                tdCamere.Controls.Add(ddlAdulti);
                trCamere.Cells.Add(tdCamere);

                tdCamere = new TableCell();
                DropDownList ddlBambini = new DropDownList();
                ddlBambini.CssClass = "text_Box";
                ddlBambini.ID = "txtBambini" + i.ToString();
                for (int h = 0; h < 11; h++)
                    ddlBambini.Items.Add(new ListItem(h.ToString(), h.ToString()));
                tdCamere.Controls.Add(ddlBambini);
                trCamere.Cells.Add(tdCamere);

                tbRicerca.Rows.Add(trCamere);            
            }

            this.Controls.Add(tbRicerca);
        }

        protected override void RenderContents(HtmlTextWriter output)
        {
            tbRicerca.RenderControl(output);
        }

    }
}


Quando inserisco il controllo in una pagina ricevo questo se visualizzo la pagina in progettazione:

Errore di rendering del controllo - FormRicerca1
Eccezione non gestita
Riferimento ad un oggetto non impostato su un istanza di oggetto

Dove sbaglio?

Grazie mille
Microsoft Most Valuable Professional
Re: Controllo personalizzato
Daniele Bochicchio
Daniele Bochicchio non è online. Ultima attività: 03/07/2009 15.37.56Daniele Bochicchio Top Poster
il 10 novembre 2008 alle 20.12
Gemini78 wrote:
Quando inserisco il controllo in una pagina ricevo questo se visualizzo la pagina in progettazione:

Errore di rendering del controllo - FormRicerca1
Eccezione non gestita
Riferimento ad un oggetto non impostato su un istanza di oggetto
Dove sbaglio?

il supporto a DesignTime generalmente deve essere sviluppato ad hoc. ad ogni modo, è un problema legato al fatto che quando l'aggiungi alla pagina, VS cerca di farne il rendering e per qualche motivo una variabile è nulla e cerchi di avere accesso. tra l'altro dovresti controllare tutto quello che potenzialmente può essere null anche per evitare problemi a runtime, dove immagino che non funzioni, giusto?

Daniele Bochicchio
ASP.NET
.NET Framework
LINQ
Silverlight
Re: Controllo personalizzato
Gemini78
Gemini78 non è online. Ultima attività: 03/07/2009 19.37.55Gemini78
il 11 novembre 2008 alle 18.44
193 messaggi dal 21 marzo 2008
Grazie per la risposta.
Quando va in esecuzione funziona. Visualizza il form di ricerca, ma quando clicco sul tasto cerca e richiamo la funzione che restituisce il numero di camere invece di restituire il valore attuale, restituisce il valore al momento della creazione del controllo. E' come se perda il viewstate. Perchè?

Il problema della non visualzzazione in progettazione può essere che nella creazione del controllo personalizzato creo e associo i valori controlli della tabella e poi renderizzo solo la tabella?

Articoli dove posso trovare la realizzazione di controlli personalizzati?
Grazie mille§
Microsoft Most Valuable Professional
Re: Controllo personalizzato
Daniele Bochicchio
Daniele Bochicchio non è online. Ultima attività: 03/07/2009 15.37.56Daniele Bochicchio Top Poster
il 12 novembre 2008 alle 09.35
Gemini78 wrote:
Quando va in esecuzione funziona. Visualizza il form di ricerca, ma quando clicco sul tasto cerca e richiamo la funzione che restituisce il numero di camere invece di restituire il valore attuale, restituisce il valore al momento della creazione del controllo. E' come se perda il viewstate. Perchè?

così su due piedi è difficile dirlo, perchè comunque utilizzi tutti custom control che non sappiamo esattamente come sono messi.

Il problema della non visualzzazione in progettazione può essere che nella creazione del controllo personalizzato creo e associo i valori controlli della tabella e poi renderizzo solo la tabella?

può essere.

Articoli dove posso trovare la realizzazione di controlli personalizzati?

http://www.aspitalia.com/ricerca/super.aspx?key=custom+control

Daniele Bochicchio
ASP.NET
.NET Framework
LINQ
Silverlight

Vai a:
Torna al forum |   Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.

COMMUNITY
ULTIMI MESSAGGI
MEDIA
IN EVIDENZA
MISC
Powered by .db Forums "Caesar Reborn" v. 2009.6.9