268 messaggi dal 25 novembre 2010
ho messo un evento su una GridView in modo che quando viene cliccato il link Seleziona compaia un FormView con una DropDownlist che deve avere selezionato un valore specifico.
        protected void EntrateGV_SelectedIndexChanged(object sender, EventArgs e)
        {
            GridViewRow gvr = GVEntrate.SelectedRow;
            string selected_causale = gvr.Cells[3].Text;
            //string selected_conto = gvr.Cells[4].Text;

            DropDownList ddlCausali = (DropDownList)FVEntrate.FindControl("DDLCausaliEntrate");
            ddlCausali.Text = selected_causale;

            //DropDownList ddlConti = (DropDownList)FVEntrate.FindControl("DDLContiEntrate");
            //ddlConti.SelectedValue = selected_causale;
        }

quando si scatena l'evento mi esce fuori questo errore:
Riferimento a un oggetto non impostato su un'istanza di oggetto. Descrizione: Eccezione non gestita durante l'esecuzione della richiesta Web corrente. Per ulteriori informazioni sull'errore e sul suo punto di origine nel codice, vedere la traccia dello stack. 

Dettagli eccezione: System.NullReferenceException: Riferimento a un oggetto non impostato su un'istanza di oggetto.

questa la riga incriminata:
ddlCausali.Text = "bar";

è tutto il pomeriggio che cerco una soluzione.
"DropDownList ddlCausali = (DropDownList)FVEntrate.FindControl("DDLCausaliEntrate");"

Stai semplicemente "ricercando" un oggetto che non è più "referenziato" dopo il postback. Verifica il ViewState anche se, in questo, caso sarebbe preferibile adottare unsa soluzione js.

Questo è quanto in base ai dati postati.

Fabrizio Canevali
268 messaggi dal 25 novembre 2010
scusa e com'è possibile che nn sia più referenziato?.
ti posto il tutto al completo.
questa la FormView:
<asp:FormView ID="FVEntrate" runat="server" DataSourceID="EntrateSourceId" DefaultMode="Edit"
        DataKeyNames="entrata_id">
        <EditItemTemplate>
            <br />
            Valore:
            <asp:TextBox ID="txt_entrata_valore" runat="server" Text='<%# Bind("entrata_valore") %>' />
            <br />
            Causale:
            <asp:DropDownList ID="DDLCausaliEntrate" runat="server" DataSourceID="CausaliSource"
                DataTextField="causale_nome" DataValueField="causale_id" AppendDataBoundItems="True">
                <asp:ListItem Selected="True" Value="-1">*</asp:ListItem>
            </asp:DropDownList>
            <br />
......
        </EditItemTemplate>
    </asp:FormView>

questo il metodo richiamato dalla GrudView allo scatenarsi dell'evento OnSelectedIndexChanged:
        protected void EntrateGV_SelectedIndexChanged(object sender, EventArgs e)
        {
            GridViewRow gvr = GVEntrate.SelectedRow;
            string selected_causale = gvr.Cells[3].Text;
            //string selected_conto = gvr.Cells[4].Text;

            DropDownList ddlCausali = (DropDownList)FVEntrate.FindControl("DDLCausaliEntrate");
            ddlCausali.SelectedValue = selected_causale.ToString();

            //DropDownList ddlConti = (DropDownList)FVEntrate.FindControl("DDLContiEntrate");
            //ddlConti.SelectedValue = selected_causale;
        }

l'unica cosa che mi viene in mente è questa: la DDL è riempita da una tabella che ha solo due campi:
-un id di tipo int
-una descrizione di tipo varchar

l'id è legato a una tabella tramite FK.
forse sbaglio a impostare come valore selezionato una stringa.
Questo non è tutto il codice ma solo una parte di codice che dice poco o nulla.

Fabrizio Canevali
268 messaggi dal 25 novembre 2010
la DDL è riempita da un ObjectDataSoirce che prende i dati da qua:
        public DataSet selectCausali()
        {
            MySqlDataAdapter adapter = null;
            DataSet ds = null;
            try
            {
                adapter = new MySqlDataAdapter("SELECT * FROM causali", conn);
                ds = new DataSet();
                adapter.Fill(ds);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                ds.Dispose();
                adapter.Dispose();
            }
            return ds;
        }


piu di questo posso darti il codice relativo alla GV e la descrizione del db di mysql.
altro nn saprei.
Modificato da fermat il 06 ottobre 2011 21.53 -
268 messaggi dal 25 novembre 2010
ho provato con questa modifica:
        protected void EntrateGV_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                GridViewRow gvr = GVEntrate.SelectedRow;
                string selected_causale = gvr.Cells[3].Text;
                string selected_conto = gvr.Cells[4].Text;

                DropDownList ddlCausali = (DropDownList)FVEntrate.FindControl("DDLCausaliEntrate");
                ddlCausali.SelectedValue = "bar";

                //DropDownList ddlConti = (DropDownList)FVEntrate.FindControl("DDLContiEntrate");
                //ddlConti.SelectedValue = selected_causale;
            }
        }

ora nn mi da l'errore però nn viene selezionato il valore giusto.

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
UTENTI ONLINE
In primo piano

I più letti di oggi

Media
In evidenza
MISC